VBA基础
VB程序中实现字节移位操作
2004-09-26 15:36:35
CF是进位标志,采用Boolean类型逻辑变量,如果CF为True表示有进位,为False则表示无进位。 Public CF As Boolean   '进位标志
'1.逻辑左移
Public Function SHL(OPR As Byte, n As Integer) As ByteDim BD As ByteDim I As IntegerBD = OPRFor i = 1 To n - 1BD = (BD And &H7F) * 2 '将D7位屏蔽左移,防止字节溢出Next iCF = BD And &H80 '判断D7位是否进位SHL = (BD And &H7F) * 2End Function
'2.逻辑右移
Public Function SHR(OPR As Byte, n As Integer) As ByteDim BD As ByteDim I As IntegerBD = OPRFor i = 1 To n - 1BD = BD \ 2 '右移Next iCF = BD And 1 '判断D0位是否进位SHR = BD \ 2End Function
'3.算术右移
Public Function SAR(OPR As Byte, n As Integer) As ByteDim BD As ByteDim I As IntegerDim Fg1 As ByteBD = OPRFg1 = BD And &H80For i = 1 To n - 1BD = BD \ 2 '右移Next iCF = BD And 1 '判断D0位是否进位BD = BD \ 2 '右移SAR = BD Or Fg1End Function
'4.循环左移
Public Function ROL(OPR As Byte, n As Integer) As ByteDim BD As ByteDim I As IntegerDim Fg1 As ByteBD = OPRFor i = 1 To nFg1 = (BD And &H80) \ 128 '判断D7位是否进位BD = ((BD And &H7F) * 2) Or Fg1 '带进位左移Next iCF = Fg1ROL = BDEnd Function
'5.循环右移
Public Function ROR(OPR As Byte, n As Integer) As ByteDim BD As ByteDim I As IntegerDim Fg1 As ByteDim Fg2 As ByteBD = OPRFor i = 1 To nFg1 = (BD And 1) * 128 '判断D0位是否进位BD = (BD \ 2) Or Fg1 '带进位右移Next iCF = Fg1ROR = BDEnd Function
'6.进位循环左移
Public Function RCL(OPR As Byte, n As Integer) As ByteDim BD As ByteDim I As IntegerDim Fg1 As ByteDim Fg2 As ByteBD = OPRFg2 = CF And 1For i = 1 To nFg1 = (BD And &H80) \ 128 '判断D7位是否进位BD = ((BD And &H7F) * 2) Or Fg2 '带进位左移Fg2 = Fg1Next iCF = Fg1RCL = BDEnd Function
'7.进位循环右移
Public Function RCR(OPR As Byte, n As Integer) As ByteDim BD As ByteDim I As IntegerDim Fg1 As ByteDim Fg2 As ByteBD = OPRFg2 = CF And 128For i = 1 To nFg1 = (BD And 1) * 128 '判断D0位是否进位BD = (BD \ 2) Or Fg2 '带进位右移Fg2 = Fg1Next iCF = Fg1RCR = BDEnd Function
结束语 以上七个字节移位操作函数的功能和用法同宏汇编语言的移位操作指令基本相同,不过只对单字节进行操作,但上述程序稍加改动后,就可对双字节Integer类型和四字节Long类型进行移位操作。 (责任编辑:DawnSummit E-mail:guixf@staff.ccidnet.com)