Afshin Mehrabani - 2 years ago 92
Javascript Question

Why does bitwise "not 1" equal -2?

Suppose we have

`1`
and this number in base 2 is:

``````00000000000000000000000000000001
``````

Now I want to flip all bits to get following result:

``````11111111111111111111111111111110
``````

As far as I know, the solution is to use the
`~`
(bitwise NOT operator) to flip all bits, but the result of
`~1`
is
`-2`
:

``````console.log(~1); //-2
console.log((~1).toString(2)); //-10 (binary representation)
``````

Why do I get this strange result?

There are 2 integers between `1` and `-2`: `0` and `-1`

`1`   in binary is `00000000000000000000000000000001`
`0`   in binary is `00000000000000000000000000000000`
`-1` in binary is `11111111111111111111111111111111`
`-2` in binary is `11111111111111111111111111111110`
("binary" being 2's complement, in the case of a bitwise not `~` )

As you can see, it's not very surprising `~1` equals `-2`, since `~0` equals `-1`.

As @Derek explained, These bitwise operators treat their operands as a sequence of 32 bits. `parseInt`, on the other hand, does not. That is why you get some different results.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download