This week's book giveaway is in the General Computing forum.
We're giving away four copies of Arduino in Action and have Martin Evans, Joshua Noble, and Jordan Hochenbaum on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Explain the code... Big Moose Saloon
  Search | Java FAQ | Recent Topics
Register / Login


JavaRanch » Java Forums » Java » Beginning Java
Reply Bookmark "Explain the code..." Watch "Explain the code..." New topic
Author

Explain the code...

sharmistha mohapatra
Greenhorn

Joined: Dec 12, 2008
Posts: 18
I was just trying out a code as below

public class Flip{
public static void main(String argv[]){
System.out.println(~4);
}
}

And i get the result as -5.

Kindly explain me how does it happen?
Maneesh Godbole
Saloon Keeper

Joined: Jul 26, 2007
Posts: 8566

The tilde "~" inverts the bits ( 0 to 1 and 1 to 0)
More here
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html

[Donate a pint, save a life!] [How to ask questions] [Onff-turn it on!]
sharmistha mohapatra
Greenhorn

Joined: Dec 12, 2008
Posts: 18
Thanks for the reply!!!

But still under confusion,as where does this invertion come into action...
If i replace the number in the code to 5 or 6 or 7,the output gives a +1 to the number with a negative sign.

For eg: if i replace it with say 6 now...
I get the output as -7
Vijitha Kumara
Bartender

Joined: Mar 24, 2008
Posts: 3673

sharmistha mohapatra wrote:

If i replace the number in the code to 5 or 6 or 7,the output gives a +1 to the number with a negative sign.

For eg: if i replace it with say 6 now...
I get the output as -7


Yes, That's an easy way to calculate the result without trying it in two's complement way (which is what happens internally).


SCJP 5 | SCWCD 5
[How to ask questions] [Twitter]
fred rosenberger
lowercase baba
Bartender

Joined: Oct 02, 2003
Posts: 10043
    
    6

There are two thing you need to understand

1) the '~' inverts all the bits. Since a '4' is represented as

00000000 00000000 00000000 00000100

when you invert the bits you get

11111111 11111111 11111111 11111011

2) now you need to understand how java interprets this value. google or search this forum for "two's complement". basically, you look a the left-most digit, and if it's a 1, you know your value will be negative. you then invert all the digits and add one, so you get



which is 5. and we know our answer is negative, so "11111111 11111111 11111111 11111011" = -5.


Never ascribe to malice that which can be adequately explained by stupidity.
 
I agree. Here's the link: http://zeroturnaround.com/jrebel - it saves me about five hours per week
 
subject: Explain the code...
 
Similar Threads
overloading
how come its compiling??
A simple Query
Inner Class Problem
how to solve this hashcode() example.?