一、位运算复习
二、Leetcode位运算题目
191. 位1的个数
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
class Solution {
public:
int hammingWeight(uint32_t n)
{
int res = 0;
while(n)
{
res++;
n &= n - 1;
}
return res;
}
};
时间复杂度:O(m),其中m为二进制位1的个数。
461. 汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x
和 y
,计算它们之间的汉明距离。
由位不同,可以异或解决。
class Solution {
public:
int hammingDistance(int x, int y)
{
int z = x ^ y;
int res = 0;
while(z)
{
res++;
z &= z - 1;
}
return res;
}
};
476. 数字的补数
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
class Solution {
public:
int findComplement(int num) {
int temp = num, mask = 1;
while(temp)
{
temp >>= 1;
mask <<= 1;
}
return num ^ (mask - 1);
}
};
371. 两整数之和
不使用运算符 +
和-
,计算两整数a
、b
之和。
class Solution {
public:
int getSum(int a, int b) {
while(b)
{
int c = a ^ b;
b = (a & b) << 1;
a = c;
}
return a;
}
};