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

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

最佳答案

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

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

关于java - 在 Java 中使用按位 & 运算符和 + 给出不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13026029/

相关文章:

java - 尝试调用虚拟方法 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()' android

c++ - DWORD 中的包装值

javascript - 如何检查是否不使用Javascript按位运算符?

java - 在 Java 中添加 2 个 BitSet

c++ - 使用按位运算符设置移位位

java - 如何获取复数值?

Java -install 与 PATH

java - 扩展嵌套在实现接口(interface)的非基类中的非静态类

将32位 float 转换为64位uint64_t

MYSQL 对多个条目按位或