在Java中使用bitwise&operator和+会产生不一致的结果

有人可以解释为什么这两个Java代码表现不同吗? 第一个正确计算位数,但第二个只显示1或0表示非零数字。 我不明白发生了什么事。

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

在Java中, + 优先级高于& 。 您的表达式num+n&1将添加numn ,然后取最低位。

要解决此问题,请尝试在第二个示例中使用num=num+(n&1);

运算符优先级。 +优先级高于& 。 你的代码

 num=num+n&1 

将被执行像

 num=(num+n)&1 

看这里

运算符优先级

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

 num=num+n&1; 

是不同的。
你正在做着不同的时刻。