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