Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!

# shift opeartors - need help

Vidya Ramachandran
Greenhorn
Posts: 24
hello,

i have some doubts on the operations of shift operators... Can some one

pls answer how we get sucha result.

a) public class test {
public static void main(String args[]) {
byte x = 3;
x = (byte)~x;
System.out.println(x);
}
}

b) public class test {
public static void main(String args[]) {
int x;

x = -3 >> 1;
x = x >>> 2;
x = x << 1;
System.out.println(x);
}
}

c) public class test {
public static void main(String args[]) {
int i = -1;
i = i >> 1;
System.out.println(i);
}
}

Basically i have a doubt as how the negative numbers like -3 etc will

be represented in binary. Also how the ~ works.

Sreeram Desigan
Greenhorn
Posts: 23
Dear Smarty,
In java -ive numbers are represented in twos compliment arithmetics. That is the binary representation of a number can be obtained by inverting the bit representation of the number and adding 1 to the result. Thus -3 will be represented as-
3 in binary is 00000011
now for - 3 invert the bits first
which will be 11111100
now add 1 to the result. thus 11111101 this is the binary reprentation of -3 in a 8 bit format. (i took 8 bits for ease of representation).
Bitwise operators are very easy to use i will tell u some basic rules of finding the results.
~x = (-x)-1 // this rule is always true thus ~3 = (-3) -1 = -4
x >>n = x/(2 power of n)// 9>>2 = 9 / (2 power 2) = 9/4 = 2;
x<<n = x * (2 power of n)//
Please let me know if further clarifications are required.

Keith Lynn
Ranch Hand
Posts: 2409
a) public class test {
public static void main(String args[]) {
byte x = 3;
x = (byte)~x;
System.out.println(x);
}
}

The bit value of the byte 3 is

00000011

~ is the complement operator

The result of ~3 is

11111111111111111111111111111100

Casting it to a byte we get

11111100

Which is the representation of -4.

b) public class test {
public static void main(String args[]) {
int x;

x = -3 >> 1;
x = x >>> 2;
x = x << 1;
System.out.println(x);
}
}

The representation of -3 is

11111111111111111111111111111101

The first shift gives

11111111111111111111111111111110

The second shift gives

00111111111111111111111111111111

The third shift gives

01111111111111111111111111111111

The value is

Integer.MAX_VALUE

c) public class test {
public static void main(String args[]) {
int i = -1;
i = i >> 1;
System.out.println(i);
}
}

The bit representation of -1 is

11111111111111111111111111111111

The shift gives

11111111111111111111111111111111

which is -1.

Negative numbers are stored using 2's complement.

Mark Spritzler
ranger
Sheriff
Posts: 17278
6
"smarty"

Change your display name back to your real first and last names.

Mark

Bert Bates
author
Sheriff
Posts: 8898
5
Hey Guys,

Also remember that this is a topic on 1.4, but it's NOT a topic on the 1.5 exam.