数字的补数
题目:
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在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
;
}
}