programming forums Java Java JSRs Mobile Certification Databases Caching Books Engineering OS Languages Paradigms IDEs Build Tools Frameworks Products This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
Sheriffs:
Saloon Keepers:
Bartenders:

bitwise >>> strange behaviour

Nancy Antony
Ranch Hand
Posts: 145
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
Saloon Keeper
Posts: 7987
143
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
Sheriff
Posts: 9610
37
Nancy remember that bitwise operators are not on the exam anymore...

Javin Paul
Ranch Hand
Posts: 297

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

Stephan van Hulst
Saloon Keeper
Posts: 7987
143
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
Posts: 297

Thanks Stephan ,its pretty clear now.

 Did you see how Paul cut 87% off of his electric heat bill with 82 watts of micro heaters?