long型转成bytes

来源:互联网 发布:js clientx undefined 编辑:程序博客网 时间:2024/06/04 19:02

今天刚好有人问VB的Long转换成Bytes,问下面代码是什么意思

Bytes = (Number And &H7F000000) \ &H1000000 Or (((Number And &H80000000) <> 0) And &H80)

实际上各种语言计算位的方式都是基本一致的。要理解这些什么意思,关键得能把这些变量和16进制数要有位的概念。

1、VB中long是32位,如果就是4个字节,一个字节的二进制是8位(1111 1111),如果是其他语言也一样,看变量占几个字节,然后转成位的方式

2、H7F000000二进制是01111111 00000000 00000000 00000000 ,为了防止溢出,最高位设置成0。and操作后,就剩最高位的8位了。但第8位是不准确的。

3、H1000000二进制是1 00000000 00000000 00000000 ,除法相当于移位,也就是剩下最高位8位

4、&H80000000二进制10000000 00000000 00000000 00000000,and操作是检测最高位是0还是1

5、&H80二进制是10000000,and操作检测8位中最高位

6、(Number And &H7F000000) \ &H1000000是求出最高8位。

7、(((Number And &H80000000) <> 0) And &H80)后面这部分总体来说就是最高位如果是0则结果0,如果最高位是1,则结果是1

8、两组or以下,结果就是long型的最高8位数,为什么or一下,还记得前面说的第8位不准确吧


这是求最高8位的,其他低位的3个字节也可以同理,单另外3个字节中每个字节的第8位就不用做特殊处理了,也就是最高位的字节要做特殊处理

0 0
原创粉丝点击