輸入:整數a
輸出:整數b
條件:a和b的二進位制1的個數相同,且a和b之間的距離|a-b|最小。
題目沒有說明整數型別,這裡認為是帶符號的整數,即區分正負數。
根據題意,a和b的二進位制1的個數相同,且要求距離最小,那麼a和b的差別就在於相鄰的bit位,如1100和1010,0011和0101等。
當a的最後一位(低位)為0,則找到最後(右邊)一位1,然後將該1與左邊的0交換,即得到b;如1100和1010
當a的最後一位(低位)為1,則找到最後(右邊)一位0,然後將該0與右邊的1交換,即得到b。如0011和0101
注意:
考慮邊界條件:(計算機所有的數都是以補碼的形式存在)
如:+127的二進位制補碼表示為0111 1111,按上述規則交換之後,為1111 1110,補碼轉為原碼(負整數:符號位不變,取反+1),即1000 0010,就是-2。
如:-128的二進位制補碼表示為1000 0000,按上述規則交換之後,為0000 0001,補碼轉為原碼(正整數:補碼和原碼一樣),即0000 0001,就是1。
寫**時需注意:
1、二進位制補碼的移位:左移時,正負數都是低位補0;右移時,正數高位補0,負數高位補1;
2、正負數的二進位制補碼表示以及相互轉換;
二進位制 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...
二進位制1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。可能引起死迴圈的解法 class solution return cnt 由於數字在計算機中的二進位制儲存事實上並不包含符號 也就是 都是統一用補碼表示的。移位操作會保證數的正負不變,當遇到乙個負數,右移到最前面的符號位1時,再往右移...
二進位制中1的個數 二進位制中0的個數
1 題目 實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數,例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。2 解法 解法 一 可能會引起死迴圈的解法 基本思路 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原理處於從右邊數起的第二位...