my dog learned polymorphism*
The moose likes Beginning Java and the fly likes Bitwise Complement Confusion Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Bitwise Complement Confusion" Watch "Bitwise Complement Confusion" New topic
Author

Bitwise Complement Confusion

Karen Baog
Ranch Hand

Joined: Mar 02, 2005
Posts: 120
Hi guys,

I'm having incorrect results using Java's ~ operator.
Here's the code I'm using:



If n == -124, the result I get is -125, after the complement.
I was expecting (and should be) positive 131.

124 -> 0111 1100

invert: 1000 0011 (which is 131)

Please help. I don't know what I'm missing here.





amerzil co-ed student<br />"Praise be the Code"
David Weitzman
Ranch Hand

Joined: Jul 27, 2001
Posts: 1365
Java stores integers using two's complement.

Also keep in mind that Java int's are 32 bits long, so even if the int were unsigned the value of ~124 would be much closer to 4 billion than 131.
[ July 25, 2005: Message edited by: David Weitzman ]
Periakaruppan Thiagarajan
Ranch Hand

Joined: Jul 26, 2005
Posts: 65
Hi karen,
This will answer your question "why did you get -125 instead of 131?".

32bit representation of 124 is 0000 0000 0000 0000 0000 0000 0110 1100

(~n) => 1111 1111 1111 1111 1111 1111 1001 0011 -(a)

Since the most significant bit is 1, take 2's complement to find out the number

2's complement of (a)

0000 0000 0000 0000 0000 0000 0110 1100
+ 0000 0000 0000 0000 0000 0000 0000 0001

Which will give you

0000 0000 0000 0000 0000 0000 0110 1101 which is nothing but binary representaion of 125. Since the most significant bit is 1, it must be a negative number. So the answer is -125.
 
 
subject: Bitwise Complement Confusion