原题目:Leetcode 476
补数是对该数的二进制表示取反。
首先了解位运算 “异或”
当两个数 位
相同时,为0,
不相同时,为1.
以5为例,二进制为:101
为了将1 变成0 , 0 变成1,可以与111进行异或操作。
结果是010,即:2
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.
最后进行异或操作,得到的就是补数了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。