Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format negative integers in two's complement representation

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?

like image 623
Maxim Avatar asked Apr 27 '13 18:04

Maxim


People also ask

What is the 2's complement representation of (- 17?

the MSB is 0, hence (-17)2 cannot represented in 2's complement representation with 5 bit, therefore (-17) in 2's complement is simply (10001)2 = (17)10 .

Why are negative numbers represented in two's complement?

In 2s-complement representation, we represent a positive number as it is and negative number by its corresponding 2s-complement, so we can use the same circuit to perform addition and subtraction.


1 Answers

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'
like image 108
Antimony Avatar answered Sep 24 '22 15:09

Antimony