File APIs for Java Developers Manipulate DOC, XLS, PPT, PDF and many others from your application. http://aspose.com/file-tools
Big Moose Saloon
 Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies Register / Login

# shift opeartors - need help

Vidya Ramachandran
Greenhorn

Joined: Nov 04, 2005
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

Joined: Apr 07, 2006
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

Joined: Feb 07, 2005
Posts: 2398
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

Joined: Feb 05, 2001
Posts: 17276

6

"smarty"

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

Mark

Bert Bates
author
Sheriff

Joined: Oct 14, 2002
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.

Spot false dilemmas now, ask me how!
(If you're not on the edge, you're taking up too much room.)

I agree. Here's the link: http://aspose.com/file-tools

subject: shift opeartors - need help