繁体   English   中英

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

[英]Using bitwise & operator and + in Java giving inconsistent results

有人可以解释为什么这两个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中, + 优先级高于& 您的表达式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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM