From hexadecimal to one's complement in Python

user1841870 picture user1841870 · Nov 21, 2012 · Viewed 13.2k times · Source

Is there an easy way to produce a one's complement in python?

For instance, if you take the hex value 0x9E, I need to convert it to 0x61.

I need to swap the binary 1's for 0's and 0's for 1's. It feels like this should be simple.

Answer

Martijn Pieters picture Martijn Pieters · Nov 21, 2012

Just use the XOR operator ^ against 0xFF:

>>> hex(0x9E ^ 0xFF)
'0x61'

If you need to work with values larger than a byte, you could create the mask from the int.bit_length() method on your value:

>>> value = 0x9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x61'
>>> value = 0x9E9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x6161'