Private Sub Command1_Click()
Dim a&, b&, c&
Dim i&
i = &H123456
a = (i And &HFF0000) / &H10000
b = (i And &HFF00) / &H100
c = (i And &HFF)
MsgBox Hex(a) & "," & Hex(b) & "," & Hex(c)
End Sub
计算后b的值应该是&H34,可是为什么是&H1234??????
我在多部机器上都是如此!
为什么????????

解决方案 »

  1.   

    这不是bug,是你不理解VB的16进制常数命名规则
    b = (i And &HFF00) / &H100一句中,因为i是3字节,所以常数&HFF00自动带符号扩展到4字节,即&HFF00 = &HFFFFFF00,结果当然是123400了
    要限定&HFF00就是两字节,或者让它无符号扩展成&H0000FF00,要这么写:b = (i And &HFF00&) / &H100 '注意后面那个&
      

  2.   

    不是,应该这样
    Private Sub Command1_Click()
    Dim a&, b&, c&
    Dim i&
    i = &H123456
    a = (i And &HFF0000) / &H10000 Mod &H100
    b = (i And &HFF00) / &H100 Mod &H100
    c = (i And &HFF)
    MsgBox Hex(a) & "," & Hex(b) & "," & Hex(c)
    End Sub
      

  3.   

    danielinbiti(金):这不是一回事吗。我的方法还可以少做一次取模运算
      

  4.   

    用zhangyan_qd(doggyzone)的方法要加引号比较好
    Private Sub Command1_Click()
    Dim a&, b&, c&
    Dim i&
    i = "&H123456"
    a = (i And "&HFF0000") / "&H10000"
    b = (i And "&H00FF00") / "&H100"  '<--特别是这里
    c = (i And "&HFF")
    MsgBox Hex(a) & "," & Hex(b) & "," & Hex(c)
    End Sub