VB没有提供移位操作的指令和函数,只提供and(与)、or(或)、xor(异或)、eqv(同或)、not(非)等几个运算符,而编程时有时需要对一个字节进行移位操作(如进行加密),怎么办?其实只用and、or二个运算符即可搞掂。例如要将变量byte1的第八位置1(假设byte1的二进制值为01001101),则只需byte1or&h80(即01001101or10000000),如要将第八位置0,则只需byte1and&h7f。请看下面程序段是如何实现循
环左移的:
PublicFunctionbyteleft(byte1AsByte,nAsInteger)AsByte`将byte1左移n位
DimintemAsByte`临时变量
Dimintem1AsByte`临时变量
Dimx,yAsInteger
intem1=byte1
Forx=1Ton`移多少位就循环多少次
Fory=8To1Step-1`从第八位(左边第一位)开始循环左移
SelectCasey
Case8
If(intem1And&H80)=&H80Then`如果临时变量intem1的第八位是1,
intem=&H1`则将临时变量intem置1,
Else
intem=&H0`反之置0
EndIf
Case7
If(intem1And&H40)=&H40Then`如果临时变量intem1的第七位是1,
intem1=intem1Or&H80`则将其第八位置1(其它位不变),
Else
intem1=intem1And&H7F`反之将第八位置0(其它位不变)
EndIf
Case6
If(intem1And&H20)=&H20Then`操作与上面相同
intem1=intem1Or&H40
Else
intem1=intem1And&HBF
EndIf
Case5
If(intem1And&H10)=&H10Then
intem1=intem1Or&H20
Else
intem1=intem1And&HDF
EndIf
Case4
If(intem1And&H8)=&H8Then
intem1=intem1Or&H10
Else
intem1=intem1And&HEF
EndIf
Case3
If(intem1And&H4)=&H4Then
intem1=intem1Or&H8
Else
intem1=intem1And&HF7
EndIf
Case2
If(intem1And&H2)=&H2Then
intem1=intem1Or&H4
Else
intem1=intem1And&HFB
EndIf
Case1
If(intem1And&H1)=&H1Then
intem1=intem1Or&H2
Else
intem1=intem1And&HFD
EndIf
Ifintem=&H1Then`移完第一位后,如果intem是1(即第八位是1)
intem1=intem1Or&H1`则将intem1的第一位置1
Else
intem1=intem1And&HFE`反之置0
EndIf
EndSelect
Nexty
Nextx
byteleft=intem1`将intem1的值返回给函数名
EndFunction
参照此程序段,不难实现循环右移。
(此程序段在VB5上调试通过。)
->