原题目: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