1. 程式人生 > >如果要將整數A轉換為B,需要改變多少個bit位?

如果要將整數A轉換為B,需要改變多少個bit位?

Python實現

樣例

如把31轉換為14,需要改變2個bit位。

(31)10=(11111)2

(14)10=(01110)2

思路

1、比較容易想到的是移位,然後遇到1計數器加1就好了。但是需要注意終止條件,正數迴圈移位會得到0,負數並不是這樣,會得到1000…000,也就是-2**31。因為Java/Python中整數是以32個bit位儲存的,第1位是符號位,31位是值。所以我們的移位操作最多進行31次,這個資訊也可以做為迴圈中止條件。

2、如果是統計正整數的bit位中有幾個1可以有如下程式碼:

count = 0
while num:
    num &= (num - 1)
    count += 1

所以我們可以先對輸入的兩個數取異或得到num,然後統計num的bit位中有幾個1就可以了。但是負數需要特別注意,負數的bit位是補碼。而且不能用上面的方法

輸入:1, -1
bit位: 1=(0 000…0001),-1=(1 111…111)
異或:-2 = (1 111…110)

因此問題就變成了怎麼處理負數:
1、去負號

num ^= -2**31    # 或者
num &= (2**31 - 1)

2、……沒想到