| Author |
bitwise >>> strange behaviour
|
Nancy Antony
Ranch Hand
Joined: Sep 06, 2007
Posts: 142
|
|
Hi Ranchers,
when I write int i=-1;
i=i>>>31;
System.out.println(i); // i is 1 understood
when I write
int i=-1;
i=i>>>32;
System.out.println(i); // value is -1
Why so?
Regards,
Nancy
|
 |
Stephan van Hulst
Bartender
Joined: Sep 20, 2010
Posts: 3056
|
|
All bitwise shift operators use modulo 32 shifting, except if the left operand is a long, then it uses modulo 64 shifting.
Simply said, if you shift your operand by 32 bits, you shift it by 32 % 32 == 0, so you don't shift it at all.
Also, on a slightly related note, you shouldn't use the >>> operator on shorts or bytes, because it can lead to unexpected results.
|
 |
Ankit Garg
Saloon Keeper
Joined: Aug 03, 2008
Posts: 9189
|
|
|
Nancy remember that bitwise operators are not on the exam anymore...
|
SCJP 6 | SCWCD 5 | Javaranch SCJP FAQ | SCWCD Links
|
 |
Javin Paul
Ranch Hand
Joined: Oct 15, 2010
Posts: 276
|
|
Hi Stephan,
Stephan van Hulst wrote:
Also, on a slightly related note, you shouldn't use the >>> operator on shorts or bytes, because it can lead to unexpected results.
Can you please elaborate this point , I know that >>> (right shift without sign) doesn't filled left most bit with sign bit instead it just fill that with zero.
and as per my knowledge byte ans short are unsigned so eventually it fill zero only but how could it lead to unexpected result ?
Thanks
Javin
|
http://javarevisited.blogspot.com - java classpath - Java67 - java hashmap - java logging tips java interview questions Java Enum Tutorial
|
 |
Stephan van Hulst
Bartender
Joined: Sep 20, 2010
Posts: 3056
|
|
Think about it. What happens to operands of types byte and short before operations are carried out? They get promoted to int.
Here is an illustration. For the sake of brevity, let's say that ints are 16 bits, and shorts are 8 bits.
Nope. The short is sign extended to int before the operation:
This problem gets worse if you use an unsigned right shift compound assignment operator.
|
 |
Javin Paul
Ranch Hand
Joined: Oct 15, 2010
Posts: 276
|
|
Thanks Stephan ,its pretty clear now.
|
 |
 |
|
|
subject: bitwise >>> strange behaviour
|
|
|