有人可以解释为什么这两个Java代码的行为有所不同吗?第一个正确计算位数,但第二个只显示1或0表示非零数字。我不明白发生了什么。
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);
}
答案 0 :(得分:5)
在Java中,+
有higher precedence而不是&
。您的表达式num+n&1
将添加num
和n
,然后取最低位。
要解决此问题,请尝试在第二个示例num=num+(n&1);
中创建语句。
答案 1 :(得分:1)
答案 2 :(得分:1)