# bitwise not - not what I expected

Tim Peters tim.one at comcast.net
Mon Aug 18 02:18:27 CEST 2003

```[Michael Peuser]
>> I have the impression (may be wrong) that you are working under the
>> misconception that there can be a "natural" binary represensation of
>> negative numbers!? Three conventions have commonly been used so far:
>> 1- Complement
>> 2-Complement
>> Sign tag plus absolut binary values

[Elaine Jackson]
> The last alternative sounds like what I was assuming. If it is, I
> would argue that it's pretty darn natural. Here's a little function to
> illustrate what I mean:
>
> def matilda(n):     ##  "my tilde"
>     if 0<=n<pow(2,29):
>         for i in range(1,31):
>             iOnes=pow(2,i)-1
>             if n<=iOnes:
>                 return iOnes-n
>     else:
>          raise

As Carl Banks pointed out, under this meaning the fundamental identity

~~x == x

almost never holds.  For example, matilda(18) is 13, but matilda(13) is 2.
~ is its own inverse under Python's meaning.  You can see that formally by
algrebraic manipulation:

~~n = ~(-(n+1)) = -(-(n+1)+1) == n

or more easily by noting that ~x in Python acts the same as xor'ing x with
an infinite string of 1 bits.

```