Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。
bin():把整數轉成二進位字串
bin() 接收一個整數,回傳它的二進位表示字串,前面會加上 '0b' 前綴。
語法:bin(x) # x 必須是整數基本用法:
print(bin(0)) # 0b0
print(bin(1)) # 0b1
print(bin(10)) # 0b1010
print(bin(255)) # 0b11111111
print(bin(1024)) # 0b10000000000回傳的是字串,不是數字。前綴 '0b' 表示這是二進位。
處理負數
bin() 可以處理負整數,會在前面加上負號:
print(bin(-1)) # -0b1
print(bin(-10)) # -0b1010
print(bin(-255)) # -0b11111111Python 不會用補數表示法,而是直接在正數的二進位前面加負號。
去掉 0b 前綴
有時候只需要純二進位數字,不要前綴,有幾種做法:
num = 42
# 方法 1:字串切片
print(bin(num)[2:]) # '101010'
# 方法 2:用 format()
print(format(num, 'b')) # '101010'
# 方法 3:用 f-string
print(f'{num:b}') # '101010'
# 補零到固定位數
print(f'{num:08b}') # '00101010'(補到 8 位)
print(format(num, '016b')) # '0000000000101010'(補到 16 位)bin() 搭配 int() 反向轉換
bin() 把整數變二進位字串,int() 可以把二進位字串變回整數:
# 整數 → 二進位字串
b = bin(42) # '0b101010'
print(b)
# 二進位字串 → 整數
n = int('0b101010', 2) # 42
print(n)
# 也可以不帶前綴
n2 = int('101010', 2) # 42
print(n2)bin() vs oct() vs hex()
Python 提供三個進位轉換函數,用法都一樣:
num = 255
print(bin(num)) # 0b11111111(二進位)
print(oct(num)) # 0o377(八進位)
print(hex(num)) # 0xff(十六進位)
# 都是回傳字串
print(type(bin(num))) # <class 'str'>小小綜合例子
來做一個數字的進位轉換器,把數字同時用各種進位顯示:
# 進位轉換器
def show_bases(num):
print(f'十進位:{num}')
print(f'二進位:{bin(num)}')
print(f'八進位:{oct(num)}')
print(f'十六進位:{hex(num)}')
print(f'二進位(8位):{num:08b}')
print(f'二進位(16位):{num:016b}')
# 顯示每個 bit
bits = f'{num:08b}'
print(f'各位元:{" ".join(bits)}')
print(f'位元值:', end='')
for i, b in enumerate(bits):
if b == '1':
power = len(bits) - 1 - i
print(f' 2^{power}={2**power}', end='')
print()
show_bases(42)
# 輸出:
# 十進位:42
# 二進位:0b101010
# 八進位:0o52
# 十六進位:0x2a
# 二進位(8位):00101010
# 二進位(16位):0000000000101010
# 各位元:0 0 1 0 1 0 1 0
# 位元值: 2^5=32 2^3=8 2^1=2