码迷,mamicode.com
首页 > 其他好文 > 详细

n的二进制中有几个1

时间:2017-03-28 19:19:28      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:表示   amp   cout   二进制   利用   turn   main   记录   实例   

实例十七:n的二进制中有几个1

方法:result=n & (n-1)
     n&(n-1)的目的使最低位的1不断翻转。

比如:n=108,其二进制表示为0110 1100,则n&(n-1)的结果为0110 1000.
因此只要不停地翻转n的二进制的最低位的1,每一次翻转让计数器+1,直到n等于0时,
计数器中记录了n的二进制中的1的个数。


解释:
n       0000 1101
n-1        0000 1100
n&(n-1)     0000 1100   ----记录一次

n-1      0000 1011
与上次进行&    0000 1000   ---记录一次

与此类推。。。。


当然,也可以利用实例十五的方法,对数值进行按位读取,若为1,就计数。在此不加以解释。

 

代码:
int _tmain(int argc, _TCHAR* argv[])
{
  int n, nCount=0;
  cout<<"请输入数值:";
  cin >> n;
  while (n)
  {
    n = n&(n - 1);
    nCount++;
  }
  cout << "1的个数:"<<nCount;
  system("pause");
  return 0;
};

n的二进制中有几个1

标签:表示   amp   cout   二进制   利用   turn   main   记录   实例   

原文地址:http://www.cnblogs.com/gd-luojialin/p/6636057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!