查看: 570  |  回复: 0
  VB6 供左移位操作的指令,子程序byteleft
楼主
发表于 2023年5月5日 16:05

VB没有提供移位操作的指令和函数,只提供and(与)、or(或)、xor(异或)、eqv(同或)、not(非)等几个运算符,而编程时有时需要对一个字节进行移位操作(如进行加密),怎么办?其实只用and、or二个运算符即可搞掂。例如要将变量byte1的第八位置1(假设byte1的二进制值为01001101),则只需byte1 or &h80 (即01001101 or 10000000),如要将第八位置0,则只需byte1 and &h7f。请看下面程序段是如何实现循环左移的。

新建From1(窗体),新建Command1(按钮CommandButton),代码:

Private Function byteleft(byte1 As Byte, n As Integer) As Byte    '将byte1左移n位
    Dim intem As Byte    '临时变量
    Dim intem1 As Byte    '临时变量
    Dim x, y As Integer
    intem1 = byte1
    For x = 1 To n    '移多少位就循环多少次
        For y = 8 To 1 Step -1    '从第八位(左边第一位)开始循环左移
            Select Case y
                Case 8
                    If (intem1 And &H80) = &H80 Then    '如果临时变量intem1的第八位是1,
                        intem = &H1    '则将临时变量intem置1,
                    Else
                        intem = &H0    '反之置0
                    End If
                Case 7
                    If (intem1 And &H40) = &H40 Then    '如果临时变量intem1的第七位是1,
                        intem1 = intem1 Or &H80    '则将其第八位置1(其它位不变),
                    Else
                        intem1 = intem1 And &H7F    '反之将第八位置0(其它位不变)
                    End If
                Case 6
                    If (intem1 And &H20) = &H20 Then    '操作与上面相同
                        intem1 = intem1 Or &H40
                    Else
                        intem1 = intem1 And &HBF
                    End If
                Case 5
                    If (intem1 And &H10) = &H10 Then
                        intem1 = intem1 Or &H20
                    Else
                        intem1 = intem1 And &HDF
                    End If
                Case 4
                    If (intem1 And &H8) = &H8 Then
                        intem1 = intem1 Or &H10
                    Else
                        intem1 = intem1 And &HEF
                    End If
                Case 3
                    If (intem1 And &H4) = &H4 Then
                        intem1 = intem1 Or &H8
                    Else
                        intem1 = intem1 And &HF7
                    End If
                Case 2
                    If (intem1 And &H2) = &H2 Then
                        intem1 = intem1 Or &H4
                    Else
                        intem1 = intem1 And &HFB
                    End If
                Case 1
                    If (intem1 And &H1) = &H1 Then
                        intem1 = intem1 Or &H2
                    Else
                        intem1 = intem1 And &HFD
                    End If
                    If intem = &H1 Then    '移完第一位后,如果intem是1(即第八位是1)
                        intem1 = intem1 Or &H1    '则将intem1的第一位置1
                    Else
                        intem1 = intem1 And &HFE    '反之置0
                    End If
            End Select
        Next y
    Next x
    byteleft = intem1    '将intem1的值返回给函数名
End Function

Private Sub Command1_Click()
    Dim byte1 As Byte
    Dim n As Integer

    byte1 = 1
    n = 1
    MsgBox byteleft(byte1, n)
End Sub

参照此程序段,不难实现循环右移。

您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com