HOWTO · Python

如何在 Python 中把整型转换为二进制

本教程将演示如何在 Python 中把整数转换成二进制。

本页内容

Python 内置函数 bin() 可以快速将整数转换为二进制字符串。若要去掉 0b 前缀,可以使用 format() 或字符串格式化;位操作示例则展示了如何手动拼出二进制位。

在 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 字符串则提供了更简洁的替代写法。

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() 更简单。循环会在绝对值不再有剩余位时停止;显式的零分支则提供唯一的二进制数字。由于它先转换绝对值,再单独添加符号,因此并不表示固定宽度的二进制补码。通过协议或硬件接口交换二进制数据时,应明确指定宽度和表示方式。