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++]

posted @ 2018-11-02 22:12  Kipper  阅读(176)  评论(0)    收藏  举报