n的二进制中有几个1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了n的二进制中有几个1相关的知识,希望对你有一定的参考价值。

实例十七: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的主要内容,如果未能解决你的问题,请参考以下文章

几种统计一个二进制数内有几个1的方法

LeetCode-191. Number of 1 Bits

一条语句判断一个整数是不是2的整数次方

求一个整数储存在内存中的二进制1的个数

[LeetCode] 191. Number of 1 Bits

边长为n的正方形中有几个正方形有几个矩形