在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
将添加num
和n
,然后取最低位。
要解决此问题,请尝试在第二个示例中使用num=num+(n&1);
。
运算符优先级。 +
优先级高于&
。 你的代码
num=num+n&1
将被执行像
num=(num+n)&1
看这里
运算符优先级
int x=n&1; num=num+x;
和
num=num+n&1;
是不同的。
你正在做着不同的时刻。