题目:
Write a function that takes an unsigned integer and returns the number of ‘1’ bits it has (also known as the Hamming weight).
Example 1:Input: 11 Output: 3 Explanation: Integer 11 has binary representation 00000000000000000000000000001011
Example 2:
Input: 128 Output: 1 Explanation: Integer 128 has binary representation 00000000000000000000000010000000
解释:
求二进制中1的个数,python可以直接求,但是有更经典的位运算解法:
假如x是一个二进数,例如x=0xfffa(1111 1111 1111 1010),要实现去掉最低位一个1
,可进行的操作是x&=(x-1)
,此时x==0xfff8
(1111 1111 1111 1000)。基于该思想,利用while
循环对(x)
判断,可实现计算二进制数中所有位上1的个数。
python代码,count法:
class Solution(object):
def hammingWeight(self, n):
"""
:type n: int
:rtype: int
"""
return bin(n).count('1')
位运算解法:
class Solution(object):
def hammingWeight(self, n):
"""
:type n: int
:rtype: int
"""
count=0
while(n):
n&=n-1
count+=1
return count
c++代码;
class Solution {
public:
int hammingWeight(uint32_t n) {
int count=0;
while(n)
{
n&=n-1;
count++;
}
return count;
}
};
总结:
位运算的应用~~