aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes shift opeartors - need help Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "shift opeartors - need help" Watch "shift opeartors - need help" New topic
Author

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);
}
}


The answer is -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 answer is 2147483646

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

The answer is -1

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

be represented in binary. Also how the ~ works.

please help me folks...
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: 2367
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: 17259
    
    6

"smarty"

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

Mark


Perfect World Programming, LLC - Two Laptop Bag - Tube Organizer
How to Ask Questions the Smart Way FAQ
Bert Bates
author
Sheriff

Joined: Oct 14, 2002
Posts: 8883
    
    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.)
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: shift opeartors - need help