File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

bitwise >>> strange behaviour

 
Nancy Antony
Ranch Hand
Posts: 145
Java Linux Oracle
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Pie
Posts: 4843
34
Chrome Netbeans IDE Windows
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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: 9497
22
Android Google Web Toolkit Hibernate IntelliJ IDE Java Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Nancy remember that bitwise operators are not on the exam anymore...
 
Javin Paul
Ranch Hand
Posts: 295
Eclipse IDE Firefox Browser Linux
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

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
Bartender
Pie
Posts: 4843
34
Chrome Netbeans IDE Windows
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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: 295
Eclipse IDE Firefox Browser Linux
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Thanks Stephan ,its pretty clear now.
 
I agree. Here's the link: http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic