数字的补数
题目:
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
注意:
给定的整数保证在32位带符号整数的范围内。
你可以假定二进制数不包含前导零位
思想:
使用长度和原数num的二进制数的长度相同且全为1的二进制数和num二进制数进行异或运算,结果即为所求。代码中减一的部分是因为num2循环左移,应该为第一个数为一后面都为零的二进制,减一即可构成一个全为一且长度相等的二进制数。
代码:
class Solution {
public int findComplement(int num) {
int tmp = num;
int num2 = 1;
while(tmp > 0){
num2 <<= 1;
tmp >>= 1;
}
num2 -= 1;
return num^num2;
}
}