Python ASM/C和x2B之间的差异+;当NEG不带符号1时
我最近偶然发现了一个仅在Python中出现的错误。Python ASM/C和x2B之间的差异+;当NEG不带符号1时,python,Python,我最近偶然发现了一个仅在Python中出现的错误。 对无符号1求反不等于FFFFFF 在汇编程序中: MOV(eax, 0x1) NEG(eax) 结果是0xFFFFFF C中的结果相同++ 但是,在Python中: import numpy as np print(hex(~np.uint32(1))) 结果是0xFFFFFE 这里我遗漏了什么?在two的补码算法中,求反需要对一个数字进行位反转(这就是~所做的)并向其添加一个 print(hex(~np.uint32(1) + 1))
对无符号1求反不等于FFFFFF 在汇编程序中:
MOV(eax, 0x1)
NEG(eax)
结果是0xFFFFFF
C中的结果相同++
但是,在Python中:
import numpy as np
print(hex(~np.uint32(1)))
结果是0xFFFFFE
这里我遗漏了什么?在two的补码算法中,求反需要对一个数字进行位反转(这就是
~
所做的)并向其添加一个
print(hex(~np.uint32(1) + 1))
或者可以使用Python的否定运算符:
print(hex(-np.uint32(1)))
但是,
~
不是求反运算符,而是按位求逆。这不是维基上说的~x返回x的补码-通过将每个1换成0,每个0换成1得到的数字。这是另一种解释相同事情的方法,同样,你也可以说~x
是-1-x
,所以你说在Python中~n=-n-1,而在C中是~n=-n?@不,在C中不是~n=-n。阅读更多关于。NEG指令与位反转不同。