6
votes

I would like to represent an negative integer in bits, using two's complement representation. Using standard Python bit representation utilities doesn't help much:

>>> bin(-5)
'-0b101'
>>> format(-5, 'b')
'-101'

-5 in two's complement is represented as 1011. How do I do this?

1

1 Answers

16
votes

Python's integers already use two's complement, but since they have arbitrary precision, the binary representation of negative numbers would have an infinite string of 1s at the start, much like positive numbers have an infinite string of 0s. Since this obviously can't be shown, it is represented with a minus sign instead.

If you want the binary representation for a specific width, you can just use modulo.

>>> bin(-5)
'-0b101'
>>> bin(-5 % (1<<32))
'0b11111111111111111111111111111011'