HOWTO · Python
如何在 Python 中把整型轉換為二進位制
本教程將演示如何在 Python 中把整數轉換成二進位制。
本頁內容
Python 內建的 bin() 函式是將整數轉換為二進位字串最快的方法。若要取得不含 0b 前綴的數字,可使用 format() 或字串格式化;位元操作範例則示範如何手動組成這些數字。
更多數字與運算子相關的技巧,收錄在我們的 Python 教學 總覽頁。
在 Python 中使用 bin() 將整數轉換為二進位
將整數傳入 bin()。它會傳回一個字串,二進位數字前方帶有 0b 前綴,用來標示這是以 2 為底的表示法。
value = 16
binary = bin(value)
print(binary)
0b10000
對於負整數,bin() 會把 - 放在前綴之前,例如 bin(-10)。結果是字串,可直接用於顯示;只有在應用程式需要數值時,才需要再解析它。
使用 format() 將整數轉換為不含 0b 前綴的二進位
將整數和 b 格式指定符傳給 format(),即可取得純二進位數字。這個指定符會選用以 2 為底的表示法;不同於 bin(),結果不含 0b。此處的 format() 是內建函式;bin() 也同樣是內建函式,而不是方法,會傳回前文所述帶有前綴的表示法。
value = 10
binary_digits = format(value, "b")
print(binary_digits)
1010
對於負整數,格式化後的字串會先顯示負號,再接上其絕對值的二進位數字。若要在前方補零,可使用 format(10, "08b") 這類寬度設定;寬度會計入數字及任何符號。寬度代表最小值,因此需要更多位數的值不會被截斷。
在 Python 中使用字串格式化將整數轉換為二進位
str.format() 方法使用相同的 b 格式指定符。當你要把數值放入較長的字串時,這種方式很實用。f-string 則提供更精簡的替代寫法。
value = 15
formatted = "Value: {:b}".format(value)
f_string = f"Value: {value:b}"
print(formatted)
print(f_string)
Value: 1111
Value: 1111
若要將二進位數字補齊至最小寬度,可在 b 前加上寬度,例如 {:08b} 或 {value:08b}。這兩種寫法都會保留負整數的符號,並將格式化欄位補至指定的最小寬度;符號也會計入寬度。
使用位元操作將整數轉換為二進位
手動轉換時,可以反覆使用 & 1 讀取最低有效位元,再用 >> 將數值的絕對值向右移。由於收集到的位元順序是由右至左,必須反轉才能組成二進位數字。下方的輔助函式會明確處理零;對於負整數,則在絕對值的二進位數字前加上負號,符合 Python 以符號和數值表示的顯示慣例,而非固定寬度的二補數表示法。
def int_to_binary(value):
if value == 0:
return "0"
sign = "-" if value < 0 else ""
magnitude = abs(value)
bits = []
while magnitude:
bits.append(str(magnitude & 1))
magnitude >>= 1
return sign + "".join(reversed(bits))
for number in (15, 0, -10):
print(int_to_binary(number))
1111
0
-1010
這種做法可用來示範位元擷取;一般轉換程式則使用 bin() 和 format() 更簡單。當數值的絕對值不再有剩餘位元時,迴圈就會停止;明確處理零的分支則會提供唯一的二進位數字。由於函式是轉換絕對值後再另外加上符號,因此它並不會產生固定寬度的二補數表示法。若要透過通訊協定或硬體介面交換二進位資料,請明確選擇寬度和表示法。