476 數字的補數

2021-08-27 18:30:13 字數 985 閱讀 6006

題目:給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。

注意:

給定的整數保證在32位帶符號整數的範圍內。

你可以假定二進位制數不包含前導零位

示例 1:

輸入:5輸出:2解釋:5的二進位制表示為101(沒有前導零位),其補數為010。所以你需要輸出2。
示例 2:

輸入:1輸出:0解釋:1的二進位制表示為1(沒有前導零位),其補數為0。所以你需要輸出0。
第一想到的比較簡單的方法就是求這個書的二進位制然後取反,本文介紹另一種方法,利用位移和異或運算來實現。因為異或運算的原理就是相同為0,相異為1,可以看到示例1中5這個數字的二進位制與2這個數的二進位制的每一位做異或運算都是1,因為本身它們每一位都是不同的(2是由5的二進位制每一位取反而得)。同理,從5的二進位制最後一位開始,對每一位和1進行異或運算就得到了2,過程如下:

1                 0                  1                        數字5

^1               ^1                 ^1                       每一位與1做異或運算

0                 1                  0                       結果:數字2

**如下:

public static int findcomplement(int num) 

return result;

}

如**所示,迴圈從最後一位開始跟1做異或運算,然後每次往左移一位,直到這個數字的最高位被處理完就可以結束了。

476數字的補數

題目點我 給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。注意 給定的整數保證在32位帶符號整數的範圍內。你可以假定二進位制數不包含前導零位。示例 1 輸入 5 輸出 2 解釋 5的二進位制表示為101 沒有前導零位 其補數為010。所以你需要輸出2。示例 2 輸入 1 輸出 0 解釋...

476 數字的補數

給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。注意 給定的整數保證在32位帶符號整數的範圍內。你可以假定二進位制數不包含前導零位。示例 1 輸入 5 輸出 2 解釋 5的二進位制表示為101 沒有前導零位 其補數為010。所以你需要輸出2。示例 2 輸入 1 輸出 0 解釋 1的二進...

476 數字的補數

leetcode上一道關於位運算的題目數字的補數,原題目如下 給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。注意 給定的整數保證在32位帶符號整數的範圍內。你可以假定二進位制數不包含前導零位。示例 1 輸入 5 輸出 2 解釋 5的二進位制表示為101 沒有前導零位 其補數為010。...