• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Bitwise Complement Confusion

 
Ranch Hand
Posts: 120
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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.



 
Ranch Hand
Posts: 1365
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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 ]
 
Ranch Hand
Posts: 65
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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.
 
Don't get me started about those stupid light bulbs.
reply
    Bookmark Topic Watch Topic
  • New Topic