To my CSDN

位运算符 按位与 &——整数n的二进制数中1的个数

整数n的二进制数中1的个数

编写一个函数,输入是一个整数,返回其二进制表达式中数字位数为 ‘1’ 的个数
代码如下:

int func(int n)//char ch
{
	 int count = 0;
         while(n > 0)  
        {  
          count++;  
            n&=(n-1);  
        } 
        return count;
}

原理:n&(n-1) 按位与 每计算一次,低位减一
二进制8与自身减一进行按位与操作
如上图中二进制8与自身减一进行按位与操作
二进制3与自身减一进行按位与操作
如上图二进制3与自身减一进行按位与操作

-由此可的:

  • 8的二进制中有一位1,因此进行了一次该操作后变为0
  • 3的二进制中有两位1,进行两次该操作后变为0

则n&=(n-1)运算的次数可以表示用来表示n的二进制中1的位数

原题链接:位1的个数

posted @ 2019-03-22 01:14  我叫RT  阅读(252)  评论(0编辑  收藏  举报