bitand的结果与python不同?
autoit: bitand(-144, 0xFFFFFFFF)python: -144 & 0xFFFFFFFF二者得到的结果不一样。貌似他们对负数的处理不同,怎么才能统一起来呢? 本帖最后由 netegg 于 2013-1-16 18:40 编辑
python结果是什么,7fffffff(hex)?01111111111111111111111111111111(binary)?2147483647(dec)? 回复 2# netegg
python 的结果是FFFFFF8E,好像这个问题无解。。。 本帖最后由 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们为什么要这样处理,真的没有看出有什么好处。 绝对是楼主的代码有问题。 本帖最后由 proteus 于 2013-1-16 20:43 编辑
Python 2结果是
4294967152L
Python 3结果是
4294967152 回复 4# happytc
汇编中经常用到这种带符号的移位。在做有符号的除法时,使用带符号的移位可以节省效率。
比如-2/2=-1,如果是用逻辑右移1位,其结果是0x7FFFFFFF,即10进制的2147483647,结果显然是错误的。如果是用AU3使用的这种方法,结果将是正确的。 大家运行的结果好像都是:4294967152
页:
[1]