1、题目
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.
2、wepon的解法
2.1 解析
这是一道很简单的题目,考察位移操作符的使用。 题意是求给定整数的二进制表示中1的个数。我们知道,1的二进制表示是“000...0001”,仅末位为1,任何整数n与1相与,结果非0即1,比如:4的二进制表示为“0000...0100”,则1&4的结果为0;5的二进制表示为“0000...0101”,则1&5的结果为1。
利用这一点,我们可以将整数n与1相与,每相与完一次,就右移一位,因为整数有32位,所以进行32次相与操作。
2.2 代码
C++
class Solution {
public:
int hammingWeight(uint32_t n) {
int num = 0;
for(int i=0;i<32;i++){
num += n&1;
n = n>>1;
}
return num;
}
};
Python
class Solution:
# @param n, an integer
# @return an integer
def hammingWeight(self, n):
num = 0
for i in range(32):
num += n&1
n = n>>1
return num