找回密码
 加入
搜索
查看: 4132|回复: 7

[效率算法] bitand的结果与python不同?

  [复制链接]
发表于 2013-1-16 17:36:51 | 显示全部楼层 |阅读模式
autoit: bitand(-144, 0xFFFFFFFF)
python: -144 & 0xFFFFFFFF
二者得到的结果不一样。貌似他们对负数的处理不同,怎么才能统一起来呢?
发表于 2013-1-16 18:31:13 | 显示全部楼层
本帖最后由 netegg 于 2013-1-16 18:40 编辑

python结果是什么,7fffffff(hex)?01111111111111111111111111111111(binary)?2147483647(dec)?
 楼主| 发表于 2013-1-16 19:04:03 | 显示全部楼层
回复 2# netegg


   
python 的结果是FFFFFF8E,好像这个问题无解。。。
发表于 2013-1-16 19:28:09 | 显示全部楼层
本帖最后由 happytc 于 2013-1-16 19:44 编辑

回复 3# 蜘蛛抱蛋


    你确认你的Python是这个结果,我怎么得到的是4294967152L呢,跟au3一样的

$a = BitAND(-144, 0xFFFFFFFF)
MsgBox(0, 0, Hex($a, 8))
MsgBox(0,0,Hex(4294967152, 8))



BTW:au3内部处理按位操作跟别的语言比有点不同,它内部是按有符号整形(signed integer)来处里的,而别的语言却是按无符号整形来操作的(unsigned integer )
典型的au3处理,如:BitShift(0xFFFFFFFF, 16) = 0xFFFFFFFF,但直觉上我们期望的值应该是0x0000FFFF,我不知道DevER们为什么要这样处理,真的没有看出有什么好处。
发表于 2013-1-16 19:38:46 | 显示全部楼层
绝对是楼主的代码有问题。
发表于 2013-1-16 20:42:27 | 显示全部楼层
本帖最后由 proteus 于 2013-1-16 20:43 编辑

Python 2结果是
4294967152L

Python 3结果是
4294967152
发表于 2013-1-16 22:30:57 | 显示全部楼层
回复 4# happytc


    汇编中经常用到这种带符号的移位。在做有符号的除法时,使用带符号的移位可以节省效率。
比如-2/2=-1,如果是用逻辑右移1位,其结果是0x7FFFFFFF,即10进制的2147483647,结果显然是错误的。如果是用AU3使用的这种方法,结果将是正确的。
发表于 2013-1-17 00:08:55 | 显示全部楼层
大家运行的结果好像都是:4294967152
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 01:57 , Processed in 0.076191 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表