kittu
kittu

Reputation: 7008

Right shift operator in java

public class Operator {

    public static void main(String[] args) {
        byte a = 5;
        int b = 10;
        int c = a >> 2 + b >> 2;
        System.out.print(c); //prints 0
    }
}

when 5 right shifted with 2 bits is 1 and 10 right shifted with 2 bits is 2 then adding the values will be 3 right? How come it prints 0 I am not able to understand even with debugging.

Upvotes: 1

Views: 204

Answers (3)

netikras
netikras

Reputation: 512

Is this what you want?

 int c = ((a >> 2) + b) >> 2; 

You were shifting to the right by whatever is 2+b. I assume you wanted to shift 5 by 2 positions, right?

b000101 >> 2   ==   b0001øø
  | |___________________|_|
  |                     |
  |_____________________|

i.e. the leftmost bit shifts to the right by 2 positions and right most bit does as well (but is has no more valid positions left on its right side so it simply disappears) and the number becomes what's left - in this case '1'. If you shift number 5 by 12 positions you will get zero as 5 has less than 12 positions in binary form. In case of '5' you can shift by 2 positions at most if you want to preserve non-zero value.

Upvotes: 1

Neeraj Jain
Neeraj Jain

Reputation: 7730

This table provided in JavaDocs will help you understand Operator Precedence in Java

additive    + -       /\  High Precedence
                      ||
shift   << >> >>>     ||  Lower Precedence 

So your expression will be

a >> 2 + b >> 2;
a >> 12 >> 2;   // hence 0

Upvotes: 6

Rohit Jain
Rohit Jain

Reputation: 213213

It's all about operator precedence. Addition operator has more precedence over shift operators.

Your expression is same as:

int c = a >> (2 + b) >> 2;

Upvotes: 2

Related Questions