题目:
实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
示例:
9表示为二进制是1001,有2位是1
因此输出为2.
答案:
9的二进制是1111,
&8 1111 & 1110 为1110
&7 1110 & 1101 为1100
&6 1100 & 1010 为1000
&5 1000 & 0111 为0000
直到为0,结束。
public int getNumberOfOne(int num) {
int count = 0;
while (num != 0) {
num &= (num - 1);
count++;
}
return count;
}
}
附加题:
判断一个整数是不是2的整数次方?
整数m需要改变二进制数多少位才能得到n
举一反三:
把一个整数与其减去1的数字做位与运算,得到的结果相当于把整数的二进制最右边一个1变成0,很多二进制问题都可以用这个思路解决