6

有人可以解释为什么这两个 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);
    }
4

3 回答 3

5

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

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

于 2012-10-23T08:12:15.567 回答
1

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

num=num+n&1

将像执行

num=(num+n)&1

这里

于 2012-10-23T08:12:58.800 回答
1

运算符优先级

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

num=num+n&1;

是不同的。
您正在按位进行 & 在不同的时刻。

于 2012-10-23T08:14:59.933 回答