求一個數的補數

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

相關文章
相關標籤/搜索