Shimano
Shimano

Reputation: 795

Using bitwise & operator and + in Java giving inconsistent results

Could someone please explain why these two pieces of Java codes are behaving differently? First one correctly counts number of bits but the second one just displays 1 or 0 for non-zero numbers. I don't understand whats happening.

    public static void printNumUnitBits(int n){
    int num=0;
    for(int i=0;i<32;i++){
        int x=n&1;
        num=num+x;
        n=n>>>1;
        }
     System.out.println("Number of one bits:"+num);
    }

    public static void printNumUnitBits(int n){
    int num=0;
    for(int i=0;i<32;i++){
        num=num+n&1;
        n=n>>>1;
        }
     System.out.println("Number of one bits:"+num);
    }

Upvotes: 6

Views: 227

Answers (3)

mdm
mdm

Reputation: 3988

Operators precedence

int x=n&1;
num=num+x;

and

num=num+n&1;

are different.
You're doing the bitwise & in a different moment.

Upvotes: 1

zvez
zvez

Reputation: 818

Operator precedence. + has higher priority than &. Your code

num=num+n&1

Will be executed like

num=(num+n)&1

Look here

Upvotes: 1

Jeff Bowman
Jeff Bowman

Reputation: 95614

In Java, + has higher precedence than &. Your expression num+n&1 will add num and n and then take the lowest bit.

To fix this, try making the statement in the second example num=num+(n&1);.

Upvotes: 5

Related Questions