Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330368
  • 博文数量: 243
  • 博客积分: 86
  • 博客等级: 民兵
  • 技术积分: 1045
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-09 17:03
个人简介

稳重,成熟

文章分类

全部博文(243)

文章存档

2015年(2)

2013年(72)

2012年(169)

我的朋友

分类: C/C++

2012-11-19 18:39:36

方法一:此方法比较完美。很适合面试官的口味

点击(此处)折叠或打开

  1. int test(int n)
  2. {
  3.      int count =0 ;
  4.      while(n!=0)
  5.      {
  6.           n=n&(n-1);
  7.           count++;
  8.      }
  9.      return count;
  10. }
方法二:第二个方法用的是分智的方法。

点击(此处)折叠或打开

  1. int test(int n)
  2. {
  3.      n=(n&0x55555555+((n>>1)&0x55555555);
  4.      n=(n&0x33333333+((n>>2)&0x33333333); 
  5.      n=(n&0x0f0f0f0f+((n>>2)&0x0f0f0f0f);
  6.      n=(n&0x00ff00ff+((n>>4)&0x00ff00ff);
  7.      n=(n&0x0000fffff+((n>>8)&0x0000ffff);
  8.      return n;
  9. }
  方法三:此方法比较常用。大家都能写出来。

点击(此处)折叠或打开

  1. int test( int n )
  2. {
  3.      int count = 0;
  4.      while(n!=0)
  5.      {
  6.          if(n%2 != 0)
  7.              count++;
  8.          n/=2;
  9.      }
  10.      return count;
  11. }



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