原题地址:476. Number Complement。
给定一个正数,输出它的补数,相当于对这个数的二进制表示,每位取反。例如5的二进制是101,每位取反是010,输出就是2。
解法
计算中数字是用补码表示的,补码包括符号位,正数是0,负数是1。例如5的补码是00000101,所以我们不能直接每位按位取反,我们需要考虑前导零。下面使用一种方法可以生成一个掩码,这个掩码可以屏蔽掉前导零。
int findComplement(int num) {
int mask = ~0;
while (num & mask) {
mask <<= 1;
}
return num ^ ~mask;
}
参考:
最后更新于2017年6月27日。