I recently stumbled at an error which is present only in Python.
Negating unsigned 1 does not equal FFFFFFFF.
In Assembler:
MOV(eax, 0x1)
NEG(eax)
Result is 0xffffffff
Same result in C++
In Python however:
import numpy as np
print(hex(~np.uint32(1)))
Result is 0xfffffffe
What am I missing here?
In two's complement arithmetic, negation requires taking the bitwise inversion of a number (which is what ~
does) and adding one to it.
print(hex(~np.uint32(1) + 1))
Or you could use Python's negation operator:
print(hex(-np.uint32(1)))
User contributions licensed under CC BY-SA 3.0