注册 登录
编程论坛 VB6论坛

VB中long型转Bytes型代码求解

lliuin6 发布于 2015-03-25 14:06, 344 次点击
请问下面这段代码怎么分析啊?看了半天没看懂!
Bytes = (Number And &H7F000000) \ &H1000000 Or (((Number And &H80000000) <> 0) And &H80)
2 回复
#2
lianyicq2015-03-25 16:09
运算顺序应该清楚吧。如Number=1234567890(10)=499602D2(16)
长整形占4个字节,共32位,按由高到低排是第31到第0位。(Number And &H7F000000)运算结果是保留Number的第30位到24位,其它位清零。得到49000000(16)。接着运算"\",得到49(16)。 49(16)再和后面的运算结果相或。
((Number And &H80000000) <> 0)的结果不是0就是1。当十进制数大于2130706432时,且保证其对应二进制数第31位为1时结果为1,否则为0。对于1234567890(10)来说,结果为0。
(((Number And &H80000000) <> 0) And &H80)的结果不是80(16)就是0,当上一步为0时,此步计算为0。
然后49(16)再和0相或,当然得49(16)。也就是Number对应16进制的高两位。
#3
xzlxzlxzl2015-03-26 06:36
前面的整除运算已经截取了number的最高位字节值,但屏蔽了符号位,后面or Number And &H80000000) <> 0是恢复符号位,这个运算应该就是获取long数据的最高位字节值吧。手机上回复,无法验证。按道理负数整除仍然是负数的。

[ 本帖最后由 xzlxzlxzl 于 2015-3-26 06:40 编辑 ]
1