476.数字的补数
题目:[https://leetcode-cn.com/problems/number-complement/description/]
思路:模拟操作,注意几个点:: 1、计算机中的有符号数值多以(默认全部)以补码的形式储存。
2、补码:正数等于原码,负数等于反码末尾+1
3、反码:正数等于原码,负数绝对值求反(符号位不不变)
代码:
class Solution
{
public:
int findComplement(int num)
{
int count=0,sou=num;
while (num!=0)
{
num=num/2;
++count;
}
sou<<=(32-count);
sou=~sou;
sou>>=(32-count);
return sou;
}
};
讨论区[https://leetcode.com/problems/number-complement/discuss/96017/3-line-C++]

浙公网安备 33010602011771号