求一个数的补数

原题目:Leetcode 476
补数是对该数的二进制表示取反。code

首先了解位运算 “异或”
当两个数 位
相同时,为0,
不相同时,为1.
以5为例,二进制为:101
为了将1 变成0 , 0 变成1,能够与111进行异或操做。
结果是010,即:2leetcode

int findComplement(int num){
    int temp = num;
    int k = 0;
    while (temp > 0)
    {
        temp >>=1;
        k = (k << 1) + 1;
    }
    return k ^ num;
}

循环计算num有多少个bit
同时,将k的位都置1.
最后进行异或操做,获得的就是补数了。get

相关文章
相关标签/搜索