现在的位置: 首页 > 综合 > 正文

求二进制数中1的个数

2013年10月19日 ⁄ 综合 ⁄ 共 507字 ⁄ 字号 评论关闭

求整数的二进制表示中1的个数,最直接的方式是求出其二进制表示,再计算出二进制表示中1的个数。但是这种方法的效率较低。因为我们只需要统计二进制表示中1的个数,所以没有必要将整数先转化为二进制,可以在对整数处理的过程中计数。整数转化为二进制,除了直接除以2以外,位操作的右移一位可以实现同样的功能。右移过程中会将最后一们直接丢弃,因此在右移操作之前需要先判断最后一们是否为1,使用“与”操作可以实现。例如如果n的最后一样是1,那么a & 0x01 = 1,否则a
& 0x01 = 0。由此可以写出实现代码:

#include <stdio.h>

int main()
{
    int n, s = 0;
    scanf("%d", &n);
    while(n)
    {
        s += n & 0x01; //判断最后一位是否为1
        n >> 1;   // 移位操作
    }
    printf("%d\n", s);
    return 0;
}

对于上述程序还存在可以改进的地方:操作过程中只考虑二进制表示中的“1”。具体实现如下:

#include <stdio.h>

int main()
{
    int n, s = 0;
    scanf("%d", &n);
    while(n)
    {
        n &= (n - 1);
        s++;
    }
    printf("%d\n", s);
    return 0;
}

抱歉!评论已关闭.