9.2 位运算基础问题
461. Hamming Distance
题目描述
给定两个十进制数字,求它们二进制表示的汉明距离(Hamming distance,即不同位的个数)。
输入输出样例
输入是两个十进制整数,输出是一个十进制整数,表示两个输入数字的汉明距离。
Input: x = 1, y = 4
Output: 2
在这个样例中,1 的二进制是 0001,4 的二进制是 0100,一共有两位不同。
题解
对两个数进行按位异或操作,统计有多少个 1 即可。
- C++
- Python
int hammingDistance(int x, int y) {
int diff = x ^ y, dist = 0;
while (diff != 0) {
dist += diff & 1;
diff >>= 1;
}
return dist;
}
def hammingDistance(x: int, y: int) -> int:
diff = x ^ y
dist = 0
while diff != 0:
dist += diff & 1
diff = diff >> 1
return dist
190. Reverse Bits
题目描述
给定一个十进制正整数,输出它在二进制下的翻转结果。
输入输出样例
输入和输出都是十进制正整数。
Input: 43261596 (00000010100101000001111010011100)
Output: 964176192 (00111001011110000010100101000000)
使用算术左移和右移,可以很轻易地实现二进制的翻转。
题解
- C++
- Python
uint32_t reverseBits(uint32_t n) {
uint32_t m = 0;
for (int i = 0; i < 32; ++i) {
m <<= 1;
m += n & 1;
n >>= 1;
}
return m;
}