c - 如何计算一个int变量中的1

标签 c binary

<分区>

如果我有一个 int i = 15; 我知道它是 0x00 00 00 0F 二进制是 0000 0000 0000 0000 0000 0000 0000 1111 在二进制中有 4 个 1

我想计算一个 int 变量中 1 的总和。

我这样写:

int count1(int i)
{
    int j = 0,num = 0;
    for(;j<32;j++)
        if((i<<j )&0x80000000)
            num++;
    return num;
}

它可以工作,但我认为它太慢了,我的意思是我可能有数百万 int 数据。有人有更有效的方法吗?

最佳答案

int countSetBits(int n)
{
    unsigned int count = 0;
    while (n)
    {
      n &= (n-1) ;
      count++;
    }
    return count;
}

这种计算数字中设置位的方法称为 Brian Kernighan 算法,其中循环将只迭代到设置位的数量。也就是说,在您的示例中,这只会循环 4 次,而无需循环整个 32 次。

关于c - 如何计算一个int变量中的1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18327067/

相关文章:

java - 我可以简化这个吗? (字节中 1 位的异或)

C中十进制转二进制

c - GMT 时间 自 秒

c - 如何通过pid获取进程的路径并重新启动它 - c

c - 仅使用停止条件时使用 "for"或 "while"循环?

javascript - 将点二进制转换为 float

c - C 中的 vector 和矩阵

c - 在步进电机的 C 结构中返回数组值

java - 二进制除法java实现

c - 在 C 中生成二进制输入