在vb使用 not, and,or ,可以实现位运算, 譬如有一个 DWORD(4个字节)的 值为:0xA1FC8F23 其中 A1FC 为高位,8F23为底位 现在我要取底位(即8F23),可以使用 AND(按位与运算) 语句 来实现 譬如: Option ExplicitPrivate Sub Command1_Click() Dim lngTest As Long, lngMask As Long '掩码 Dim lngValue As Long ' Long为4个字节 lngTest = &HA1FC8F23 lngMask = &HFFFF0000 '设置掩码为 0xFFFF0000 使高位为1 低位全为0 lngValue = lngTest And lngMask MsgBox Hex(lngValue) End Sub
不过vb据我所知好像没有移位的操作 只能自己来实现 下面的函数只能对单字节进行操作 不过改一下可以实现 多字节的操作 详见:http://www0.ccidnet.com/tech/guide/2001/04/29/58_2093.html '1.逻辑左移 Public Function SHL(OPR As Byte, n As Integer) As Byte Dim BD As Byte Dim I As Integer BD = OPR For i = 1 To n - 1 BD = (BD And &H7F) * 2 '将D7位屏蔽左移,防止字节溢出 Next i CF = BD And &H80 '判断D7位是否进位 SHL = (BD And &H7F) * 2 End Function '2.逻辑右移 Public Function SHR(OPR As Byte, n As Integer) As Byte Dim BD As Byte Dim I As Integer BD = OPR For i = 1 To n - 1 BD = BD \ 2 '右移 Next i CF = BD And 1 '判断D0位是否进位 SHR = BD \ 2 End Function '3.算术右移 Public Function SAR(OPR As Byte, n As Integer) As Byte Dim BD As Byte Dim I As Integer Dim Fg1 As Byte BD = OPR Fg1 = BD And &H80 For i = 1 To n - 1 BD = BD \ 2 '右移 Next i CF = BD And 1 '判断D0位是否进位 BD = BD \ 2 '右移 SAR = BD Or Fg1 End Function '4.循环左移 Public Function ROL(OPR As Byte, n As Integer) As Byte Dim BD As Byte Dim I As Integer Dim Fg1 As Byte BD = OPR For i = 1 To n Fg1 = (BD And &H80) \ 128 '判断D7位是否进位 BD = ((BD And &H7F) * 2) Or Fg1 '带进位左移 Next i CF = Fg1 ROL = BD End Function '5.循环右移 Public Function ROR(OPR As Byte, n As Integer) As Byte Dim BD As Byte Dim I As Integer Dim Fg1 As Byte Dim Fg2 As Byte BD = OPR For i = 1 To n Fg1 = (BD And 1) * 128 '判断D0位是否进位 BD = (BD \ 2) Or Fg1 '带进位右移 Next i CF = Fg1 ROR = BD End Function '6.进位循环左移 Public Function RCL(OPR As Byte, n As Integer) As Byte Dim BD As Byte Dim I As Integer Dim Fg1 As Byte Dim Fg2 As Byte BD = OPR Fg2 = CF And 1 For i = 1 To n Fg1 = (BD And &H80) \ 128 '判断D7位是否进位 BD = ((BD And &H7F) * 2) Or Fg2 '带进位左移 Fg2 = Fg1 Next i CF = Fg1 RCL = BD End Function '7.进位循环右移 Public Function RCR(OPR As Byte, n As Integer) As Byte Dim BD As Byte Dim I As Integer Dim Fg1 As Byte Dim Fg2 As Byte BD = OPR Fg2 = CF And 128 For i = 1 To n Fg1 = (BD And 1) * 128 '判断D0位是否进位 BD = (BD \ 2) Or Fg2 '带进位右移 Fg2 = Fg1 Next i CF = Fg1 RCR = BD End Function
可以到这里热身一下:
http://www.qhnu.edu.cn/cbe/ncre/cprogram/frame/ce02.htmAPI中的高位?
你说的是API函数中用到的32位参数中的高位吧?
就是指高16位。
在vb使用 not, and,or ,可以实现位运算,
譬如有一个 DWORD(4个字节)的 值为:0xA1FC8F23
其中 A1FC 为高位,8F23为底位
现在我要取底位(即8F23),可以使用 AND(按位与运算) 语句 来实现
譬如:
Option ExplicitPrivate Sub Command1_Click()
Dim lngTest As Long, lngMask As Long '掩码
Dim lngValue As Long ' Long为4个字节
lngTest = &HA1FC8F23
lngMask = &HFFFF0000 '设置掩码为 0xFFFF0000 使高位为1 低位全为0
lngValue = lngTest And lngMask
MsgBox Hex(lngValue)
End Sub
'1.逻辑左移 Public Function SHL(OPR As Byte, n As Integer) As Byte
Dim BD As Byte
Dim I As Integer
BD = OPR
For i = 1 To n - 1
BD = (BD And &H7F) * 2 '将D7位屏蔽左移,防止字节溢出
Next i
CF = BD And &H80 '判断D7位是否进位
SHL = (BD And &H7F) * 2
End Function
'2.逻辑右移 Public Function SHR(OPR As Byte, n As Integer) As Byte
Dim BD As Byte
Dim I As Integer
BD = OPR
For i = 1 To n - 1
BD = BD \ 2 '右移
Next i
CF = BD And 1 '判断D0位是否进位
SHR = BD \ 2
End Function
'3.算术右移 Public Function SAR(OPR As Byte, n As Integer) As Byte
Dim BD As Byte
Dim I As Integer
Dim Fg1 As Byte
BD = OPR
Fg1 = BD And &H80
For i = 1 To n - 1
BD = BD \ 2 '右移
Next i
CF = BD And 1 '判断D0位是否进位
BD = BD \ 2 '右移
SAR = BD Or Fg1
End Function
'4.循环左移 Public Function ROL(OPR As Byte, n As Integer) As Byte
Dim BD As Byte
Dim I As Integer
Dim Fg1 As Byte
BD = OPR
For i = 1 To n
Fg1 = (BD And &H80) \ 128 '判断D7位是否进位
BD = ((BD And &H7F) * 2) Or Fg1 '带进位左移
Next i
CF = Fg1
ROL = BD
End Function
'5.循环右移 Public Function ROR(OPR As Byte, n As Integer) As Byte
Dim BD As Byte
Dim I As Integer
Dim Fg1 As Byte
Dim Fg2 As Byte
BD = OPR
For i = 1 To n
Fg1 = (BD And 1) * 128 '判断D0位是否进位
BD = (BD \ 2) Or Fg1 '带进位右移
Next i
CF = Fg1
ROR = BD
End Function
'6.进位循环左移 Public Function RCL(OPR As Byte, n As Integer) As Byte
Dim BD As Byte
Dim I As Integer
Dim Fg1 As Byte
Dim Fg2 As Byte
BD = OPR
Fg2 = CF And 1
For i = 1 To n
Fg1 = (BD And &H80) \ 128 '判断D7位是否进位
BD = ((BD And &H7F) * 2) Or Fg2 '带进位左移
Fg2 = Fg1
Next i
CF = Fg1
RCL = BD
End Function
'7.进位循环右移 Public Function RCR(OPR As Byte, n As Integer) As Byte
Dim BD As Byte
Dim I As Integer
Dim Fg1 As Byte
Dim Fg2 As Byte
BD = OPR
Fg2 = CF And 128
For i = 1 To n
Fg1 = (BD And 1) * 128 '判断D0位是否进位
BD = (BD \ 2) Or Fg2 '带进位右移
Fg2 = Fg1
Next i
CF = Fg1
RCR = BD
End Function
不好意思上面的例子我搞错了 应该是:
现在我要取高位(即A1FC),可以使用 AND(按位与运算) 语句 来实现