views:

220

answers:

5

I'm getting started in Python programming. I'm reading a basic tutorial, but this point is not very clear to me. I would appreciate any help you can give me.

+9  A: 

~3 means 'invert' 3. With two's complement on natural number datatypes, this becomes -4, as the binary representation is inverted (all bits are flipped).

Chris Dennett
Just to show it in hex:3 = 0x00000003~3 = 0xFFFFFFFC and the numbers are signed therefore it is negative.
Vinzenz
+4  A: 

Because signed integers are usually stored using two's complement, which means that the bitwise inverse of an integer is equal to its algebraic inverse minus one.

Michael Borgwardt
A: 

It's the invert operator, and returns the bitwise inverse of the number you give it.

MStodd
+2  A: 

~3 means "change all the 1s to 0s and 0s to 1s", so if 3 in binary is 0000000000000011, then ~3 is 1111111111111100. since the first bit of ~3 is a 1, its a negative number. to find out which negative number, in 2s comliment, you invert all buts and add 1, so inverted we are back to 3, then added 1 we get 4.

stew
A: 

It's not just Python, it's the integer numeric representation of almost all modern computers: two's complement. By the definition of two's complement, you get a negative number by complementing the positive number and adding one. In your example, you complemented with ~ but did not add one, so you got the negative of your number minus one.

Mark Ransom