# Explain the code...

sharmistha mohapatra

Greenhorn

Posts: 18

posted 8 years ago

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?

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?

posted 8 years ago

The tilde "~" inverts the

More here

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html

**bits**( 0 to 1 and 1 to 0)More here

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html

sharmistha mohapatra

Greenhorn

Posts: 18

posted 8 years ago

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

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]

posted 8 years ago

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.

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.

There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors