我们知道十进制数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
发表评论