2

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.

Redwood
  • 66,744
  • 41
  • 126
  • 187
elgianka
  • 223
  • 2
  • 11

5 Answers5

9

~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
  • 22,412
  • 8
  • 58
  • 84
  • 2
    Just to show it in hex:3 = 0x00000003 ~3 = 0xFFFFFFFC and the numbers are signed therefore it is negative. – Vinzenz Oct 12 '10 at 16:14
4

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
  • 342,105
  • 78
  • 482
  • 720
4

~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 bits and add 1, so inverted we are back to 3, then added 1 we get 4.

Joost
  • 10,333
  • 4
  • 55
  • 61
stew
  • 11,276
  • 36
  • 49
0

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

MStodd
  • 4,716
  • 3
  • 30
  • 50
0

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
  • 299,747
  • 42
  • 398
  • 622