The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note:
0 ≤ x, y < 231.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
题意:两个数二进制位不同的个数。
解法一:两数异或后,二进制有多少1,使用 n & (n-1),每进行一次这样的操作相当于把n二进制最后一个1变为0。
class Solution {
public:
int hammingDistance(int x, int y) {
int n = x ^ y;
int cnt = 0;
while(n){
n &= (n-1);
cnt++;
}
return cnt;
}
};
n & (n-1)的另一个用法是可以判断一个数是否为2的整数幂:
1 1 & 0 = 0
2 10 & 01 = 0
4 100 & 011 = 0
8 1000 & 0111 = 0
16 10000 & 01111 = 0