蜘蛛抱蛋 发表于 2013-1-16 17:36:51

bitand的结果与python不同?

autoit: bitand(-144, 0xFFFFFFFF)
python: -144 & 0xFFFFFFFF二者得到的结果不一样。貌似他们对负数的处理不同,怎么才能统一起来呢?

netegg 发表于 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,好像这个问题无解。。。

happytc 发表于 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们为什么要这样处理,真的没有看出有什么好处。

pusofalse 发表于 2013-1-16 19:38:46

绝对是楼主的代码有问题。

proteus 发表于 2013-1-16 20:42:27

本帖最后由 proteus 于 2013-1-16 20:43 编辑

Python 2结果是
4294967152L

Python 3结果是
4294967152

pusofalse 发表于 2013-1-16 22:30:57

回复 4# happytc


    汇编中经常用到这种带符号的移位。在做有符号的除法时,使用带符号的移位可以节省效率。
比如-2/2=-1,如果是用逻辑右移1位,其结果是0x7FFFFFFF,即10进制的2147483647,结果显然是错误的。如果是用AU3使用的这种方法,结果将是正确的。

annybaby 发表于 2013-1-17 00:08:55

大家运行的结果好像都是:4294967152
页: [1]
查看完整版本: bitand的结果与python不同?