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);
}
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);
.
Operator precedence. +
has higher priority than &
. Your code
num=num+n&1
Will be executed like
num=(num+n)&1
Look here
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With