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

Shi*_*ano 6 java bit-manipulation bitwise-operators

有人可以解释为什么这两个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);
    }
Run Code Online (Sandbox Code Playgroud)

Jef*_*ica 5

在Java中,+具有更高的优先级&.你的表达式num+n&1将添加num,n然后取最低位.

要解决此问题,请尝试在第二个示例中进行声明num=num+(n&1);.