vb能够像汇编那样,对一个字节进展拆分、左右移位、与、或、非、异或吗
vb能够像汇编那样,对一个字节进行拆分、左右移位、与、或、非、异或吗?
我到这里不是为了争分。只是觉得这里有很多热情的、专业的、称职的老师。
所以这两天连着问问题。在这里问比在msdn上查还有针对性。
vb能够像汇编那样,对一个字节进行拆分(高四位、低四位)、对一个字节进行左、右移位、与、或、非、异或吗?
先谢谢了!
------解决方案--------------------
And &HF0 '取高4位
And &H0F '取低4位
* 2 '左移1位
\ 2 '右移1位
And '与
OR '或
Not '非
Xor '异或
这些都是基础知识
------解决方案--------------------
能够拆分出高4位、低四位:
C8h ----> H = &HC8 \ 16 L = &HC8 And 15
移位:
只有用乘除法来间接实现,因为存在溢出问题,相对麻烦些。
但你说只对一个字节进行移位,那就没问题了。用Long变量来做中介,没任何麻烦。
右移,用除法:
C8h >> 3 ----> &HC8 \ 8
左移,用乘法:
C8h << 2 ----> (&HC8 * 4) And &Hff
与、或、非、异或:
与 And ----> &HC8 And 15 (= 8)
或 Or ----> &HC8 Or 15 (= &HCF)
非 Not
Dim bNum As Byte
bNum = &HC8
bNum = Not bNum (bNum = &H37)
异或 Xor ----> &HC8 Xor &H63 ( = &HAB)
------解决方案--------------------
也许像我这样按部就班学东西的人不适合现在这个时代了吧?
不过,如果你要写的东西要用于实际产品的话,建议还是认真看一下MSDN的程序员手册的Part One,讲得很基础。如果什么都不懂,就拷贝一些勉强理解了的代码到产品里去,总觉得对产品不够负责。
------解决方案--------------------
只能用乘除法做位移,没别的办法了
用乘法实现左移可能导致溢出
可以设置工程属性,在优化里面选中“取消整数溢出检查”
------解决方案--------------------
对于左移,右移VB没有直接的指令实现,Delphi有
------解决方案--------------------
写个 过程/函数 就很难吗?楼主何必为自己的懒找借口呢!
这么点功能都要用控件?真不知道楼主在怎么想。
你不就是要对 字节 进行移位操作吗,简单得很,给你段代码看看吧:
我到这里不是为了争分。只是觉得这里有很多热情的、专业的、称职的老师。
所以这两天连着问问题。在这里问比在msdn上查还有针对性。
vb能够像汇编那样,对一个字节进行拆分(高四位、低四位)、对一个字节进行左、右移位、与、或、非、异或吗?
先谢谢了!
------解决方案--------------------
And &HF0 '取高4位
And &H0F '取低4位
* 2 '左移1位
\ 2 '右移1位
And '与
OR '或
Not '非
Xor '异或
这些都是基础知识
------解决方案--------------------
能够拆分出高4位、低四位:
C8h ----> H = &HC8 \ 16 L = &HC8 And 15
移位:
只有用乘除法来间接实现,因为存在溢出问题,相对麻烦些。
但你说只对一个字节进行移位,那就没问题了。用Long变量来做中介,没任何麻烦。
右移,用除法:
C8h >> 3 ----> &HC8 \ 8
左移,用乘法:
C8h << 2 ----> (&HC8 * 4) And &Hff
与、或、非、异或:
与 And ----> &HC8 And 15 (= 8)
或 Or ----> &HC8 Or 15 (= &HCF)
非 Not
Dim bNum As Byte
bNum = &HC8
bNum = Not bNum (bNum = &H37)
异或 Xor ----> &HC8 Xor &H63 ( = &HAB)
------解决方案--------------------
也许像我这样按部就班学东西的人不适合现在这个时代了吧?
不过,如果你要写的东西要用于实际产品的话,建议还是认真看一下MSDN的程序员手册的Part One,讲得很基础。如果什么都不懂,就拷贝一些勉强理解了的代码到产品里去,总觉得对产品不够负责。
------解决方案--------------------
只能用乘除法做位移,没别的办法了
用乘法实现左移可能导致溢出
可以设置工程属性,在优化里面选中“取消整数溢出检查”
------解决方案--------------------
对于左移,右移VB没有直接的指令实现,Delphi有
------解决方案--------------------
写个 过程/函数 就很难吗?楼主何必为自己的懒找借口呢!
这么点功能都要用控件?真不知道楼主在怎么想。
你不就是要对 字节 进行移位操作吗,简单得很,给你段代码看看吧:
Option Explicit
' Byte 左移位
Private Sub rol(n As Byte, Optional ByVal bit As Long = 1)
If (bit < 0) Then Err.Clear: Err.Raise 6
If (bit > 7) Then
n = 0
Else
n = CLng(n) * 2& ^ bit And 255
End If
End Sub
' Byte 右移位
Private Sub ror(n As Byte, Optional ByVal bit As Long = 1)
If (bit < 0) Then Err.Clear: Err.Raise 6