实例十七: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;
};