| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 344 人关注过本帖
标题:VB中long型转Bytes型代码求解
只看楼主 加入收藏
lliuin6
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-3-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
VB中long型转Bytes型代码求解
请问下面这段代码怎么分析啊?看了半天没看懂!
Bytes = (Number And &H7F000000) \ &H1000000 Or (((Number And &H80000000) <> 0) And &H80)
2015-03-25 14:06
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:10 
运算顺序应该清楚吧。如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进制的高两位。

大开眼界
2015-03-25 16:09
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:10 
前面的整除运算已经截取了number的最高位字节值,但屏蔽了符号位,后面or Number And &H80000000) <> 0是恢复符号位,这个运算应该就是获取long数据的最高位字节值吧。手机上回复,无法验证。按道理负数整除仍然是负数的。

[ 本帖最后由 xzlxzlxzl 于 2015-3-26 06:40 编辑 ]
2015-03-26 06:36
快速回复:VB中long型转Bytes型代码求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039904 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved