Win a copy of Functional Reactive Programming this week in the Other Languages forum!

# Bitwise complement operator

Andrew Parker
Ranch Hand
Posts: 178
Hi,
I have an int x = 5;
0000 0000 0000 0000 0000 0000 0000 0101
~x
converts to:
1111 1111 1111 1111 1111 1111 1111 1010
Now, x = -6 WHY???
I know that the 32th digit represents the -ve sign. How to compute the number "6"?
Thanks for help.
Andrew

Junilu Lacar
Bartender
Posts: 7784
62

Andrew Parker
Ranch Hand
Posts: 178
Hi,
I understand it now.
1111 1111 1111 1111 1111 1111 1111 1010
=
- (2^32) + (2^31....3) + (2^1) = - 6
Thanks
Andrew

Junilu Lacar
Bartender
Posts: 7784
62

Now you got me worried that you don't understand...
All you need to do is get the two's complement:
1. complement the number
If you start out with a negative number, you will get its positive and vice versa.
The way you showed it would be way too long unless you've memorized all the powers of 2 and can add really fast. I'm not even sure it'll give you the right result for all, if any, numbers.