二进制中1的个数
输入一个十进制数,得出它的二进制中有几个1。如9的二进制表示为1001,有2个1。
书中有3种方法来解决这个问题,我在这就说下最好的一种。
这里用到一个技巧就是消除二进制中最右的1。例如数字1100,我们先把它减1,即得1011,然后我们把1100与1011做与运算,得到1000。
那么我们循环消除1,直到消除全部,消除几次就有几个1。
代码如下:
int NumberOf1(int n) { int num=0; while( n !=0 ) { ++num; n = n&(n-1); } return num; }
消除1这个技巧非常有用,例如如何用一个语句判断一个整数是不是2的整数次方,经过观察凡是2的整数次方的数二进制表示必定只有一个1。我们只要用消除1的这个技巧消除一次来判断这个数是否变成0就可以判断这个数了。

浙公网安备 33010602011771号