有人可以解释为什么这两段 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);
}
最佳答案
在 Java 中,+
有 higher precedence比&
。您的表达式 num+n&1
将添加 num
和 n
,然后取最低位。
要解决此问题,请尝试使用第二个示例中的语句 num=num+(n&1);
。
关于java - 在 Java 中使用按位 & 运算符和 + 给出不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13026029/