Chinaunix首页 | 论坛 | 博客
  • 博客访问: 471915
  • 博文数量: 134
  • 博客积分: 3056
  • 博客等级: 中校
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-14 15:53
文章分类
文章存档

2013年(1)

2010年(133)

我的朋友

分类: C/C++

2010-06-06 21:15:30

问题:下面程序最终输出的count的值是多少?

//算法1
# include <stdio.h>
int main()
{
    int count = 0;
    int m = 779;
    
    while(m)
    {
        count++;
        m = m&(m-1);
    }
    printf("%d\n", count);
    
    return 0;
}

解答:自右向左,由低位到高位,依次将m中(二进制表示)的1变为0,即每循环依次m中的最低位的1变为0


功能:计算
m的二进制中1的个数。


我要是写计算某个数的二进制形式1的个数我会这么写

 

//算法2

#include <stdio.h>

int main()
{
    int count = 0;
    int m = 779;

    while(m)
    {
        if(m & 1)
        {
            count++;
        }
        m >>= 1;
    }
    printf("%d\n", count);
}


很显然算法1巧妙,简洁。算法2是常规做法。

阅读(855) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~