Win a copy of Functional Reactive Programming this week in the Other Languages forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Bitwise complement operator

 
Andrew Parker
Ranch Hand
Posts: 178
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Pie
Posts: 7784
62
Android Eclipse IDE IntelliJ IDE Java Linux Mac Scala Spring Ubuntu
 
Andrew Parker
Ranch Hand
Posts: 178
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Pie
Posts: 7784
62
Android Eclipse IDE IntelliJ IDE Java Linux Mac Scala Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

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
2. add 1
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.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic