位运算的5个题目和答案
时间: 2024-05-27 18:14:13 浏览: 12
1. 给定一个32位整数n,将n的二进制位翻转后返回。例如,给定n = 43261596,返回964176192。
答案:
int reverseBits(uint32_t n) {
uint32_t res = 0;
for (int i = 0; i < 32; i++) {
res = (res << 1) + (n >> i & 1);
}
return res;
}
2. 给定两个整数a和b,计算它们的和,但不能使用+或其他算术运算符。
答案:
int getSum(int a, int b) {
while (b != 0) {
int carry = (unsigned int)(a & b) << 1;
a = a ^ b;
b = carry;
}
return a;
}
3. 给定一个整数n,判断它是否为2的幂次方。
答案:
bool isPowerOfTwo(int n) {
if (n <= 0) return false;
return (n & (n - 1)) == 0;
}
4. 给定一个非负整数n,计算其二进制表示中1的个数。
答案:
int hammingWeight(uint32_t n) {
int res = 0;
while (n != 0) {
res++;
n &= (n - 1);
}
return res;
}
5. 给定两个整数m和n,计算它们的汉明距离。
答案:
int hammingDistance(int x, int y) {
int res = 0;
int z = x ^ y;
while (z != 0) {
res++;
z &= (z - 1);
}
return res;
}