使用按位和&运算符和Java中的+给出不一致的结果

时间:2012-10-23 08:09:40

标签: 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);
    }

3 个答案:

答案 0 :(得分:5)

在Java中,+higher precedence而不是&。您的表达式num+n&1将添加numn,然后取最低位。

要解决此问题,请尝试在第二个示例num=num+(n&1);中创建语句。

答案 1 :(得分:1)

运营商优先权。 +的优先级高于&。你的代码

num=num+n&1

将执行

num=(num+n)&1

here

答案 2 :(得分:1)

Operators precedence

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

num=num+n&1;

不同。
你在做按位&amp;在另一个时刻。