二进制中有多少个1

题目

计算在一个 32 位的整数的二进制表示中有多少个1
样例
给定 32 (10 0000),返回 1
给定 5(101),返回 2
给定 1023(11 1111 1111),返回 10

分析

这道题需要用到 移位运算符与运算
例如
5(101) 分别和 0...001,0...010,0...1000..10001...0进行与运算(&),如果不为0,说明5的二进制在这一位为1
0...001,0...010,0...1000..10001...0可以通过对1移位(<<)来计算。

代码(Java)

1
2
3
4
5
6
7
8
9
10
public int countOnes(int num) {
int result = 0;
for(int i = 0; i < 32; i++){
int t = num & (1 << i);
if(t != 0){
result++;
}
}
return result;
}