问题1:谁能讲讲位运算的原理?
问题2:API中的高位怎么理解?
注:分送回答最详细的

解决方案 »

  1.   

    关于位运算的原理,随便找一本汇编书看看都会有的,讲C的书也会有。
    可以到这里热身一下:
    http://www.qhnu.edu.cn/cbe/ncre/cprogram/frame/ce02.htmAPI中的高位?
    你说的是API函数中用到的32位参数中的高位吧?
    就是指高16位。
      

  2.   


    在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
      

  3.   

    不过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
     
      

  4.   

    //现在我要取底位(即8F23),可以使用 AND(按位与运算) 语句 来实现
    不好意思上面的例子我搞错了 应该是:
    现在我要取高位(即A1FC),可以使用 AND(按位与运算) 语句 来实现