如何在vba中求二进制序列的任意高低位值?

我们知道十进制数111,可以表示为1*10^0+1*10^1+1*10^2,即可以等于1+10+100。

任何一个n位的十进制数都可以表示为m位的数字(1≤m≤n)与10的m-1次幂的乘积之和。

类似的一个二进制数10010,可以表示为0*2^0+1*2^1+0*2^2+0*2^3+1*2^4,即等于2+16=18(十进制值)。

比如10的二进制为00001010,如果要取它的高6位,也就是取出000010,转换为十进制就是2。

由于十进制的10等于0*2^0+1*2^1+0*2^2+1*2^3+0*2^4+0*2^5+0*2^6+0*2^7

而取出的高6位000010转换为10进制的值等于0*2^0+1*2^1+0*2^2+0*2^3+0*2^4+0*2^5+0*2^6+0*2^7

相当于(0*2^0+0*2^1+0*2^2+1*2^3+0*2^4+0*2^5+0*2^6+0*2^7)/4

即相当于(0000 1010 and 1111 1100 ) /4

根据以上的分析,如果要取某个字节的高N位的值,只需要将该字节与某个10进制值取and 位运算,使得低8-N位都置0,然后除以2^(8-N)。

如果要取某个字节的低N位的值,只要将该字节与某个10进制值取and 位运算,使得高8-N位都为0,最后转换为10进制值即可。

代码如下:

Sub QQ1722187970()
    Dim i As Byte
    i = 251
    '取高4位
    Debug.Print (i And &HF0) / 2 ^ (8 - 4)
    '取低4位
     Debug.Print i And &HF
End Sub
       

发表评论