基础算法
数论
求一个数的补数
要求:不许有前导零
解法:找到这个数的最高位highbit,将这个数异或(1 << (highbit + 1) - 1),即为这个数的补数
class Solution {
public:
int findComplement(int num) {
int highbit = 0;
for (int i = 30; i >= 1; i --)
if (num >> i & 1) {
highbit = i;
break;
}
int mask = (highbit == 30 ? 0x7fffffff : (1 << (highbit + 1)) - 1);
return num ^ mask;
}
};