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;
};
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号