• 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;
    };

  • 相关阅读:
    2019春第九周作业
    2019春第八周作业
    2019春第七周作业
    2019春第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业
    2019年春季学期第二周作业
    学习进度条
    第六周作业
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/6636057.html
Copyright © 2020-2023  润新知