首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的1位计数数

java中的1位计数数
EN

Stack Overflow用户
提问于 2016-02-22 06:30:17
回答 3查看 12.1K关注 0票数 13

我在做leetcode问题时遇到了一个奇怪的问题。这是关于Java中的位表示。

编写一个函数,该函数接受一个无符号整数,并返回它所拥有的‘1’位数(也称为Hamming重量)。 例如,32位整数‘11’具有二进制表示形式000000000000000000000000001011,因此函数应该返回3。

我的解决办法是

代码语言:javascript
复制
public class Solution {
// you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int count = 0;
        for(int i = 0; i < 32; ++i){
            if((n >>> i) % 2 == 1){
                ++count;
            }
        }
        return count;
    }
}

由于输入情况,此代码不被接受:

4294967295 (1111111111111111111111111111111111)

我在java中查看了整数的位表示,但仍然不知道解决方案的问题?

有人能帮我吗?

EN

回答 3

Stack Overflow用户

发布于 2018-09-02 14:40:12

代码语言:javascript
复制
public int hammingWeight(int n) {
    return Integer.bitCount(n);
}

Integer.bitCount(int i) 返回指定int值的互补二进制表示中的一位数。

票数 17
EN

Stack Overflow用户

发布于 2016-02-22 06:33:57

问题是当您想要按位排列的&时执行模块化。就像,

代码语言:javascript
复制
public static int hammingWeight(int n) {
    int count = 0;
    for (int i = 0; i < 32; ++i) {
        if (((n >>> i) & 1) == 1) {
            ++count;
        }
    }
    return count;
}

public static void main(String[] args) {
    int c = -1;
    System.out.println(hammingWeight(c));
}

产出(如预期)

代码语言:javascript
复制
32
票数 7
EN

Stack Overflow用户

发布于 2016-02-22 07:00:04

Java使用两种恭维语。负位是最左边的。这意味着,如果您的数字大于Integer.MAX_VALUE,您的输入将是一个负数。当您执行%2时,符号保持不变。另一种选择是使用&1,这将改变符号位。在第一次迭代之后,您已经做了一点移位,符号位将为零。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35547114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档