
进制是数值的表示方式,Python 原生支持二进制、八进制、十进制、十六进制,并提供了丰富的进制转换功能。
一、进制表示方式
1. 四种进制的字面量
# 十进制(默认)
dec = 42
print(dec) # 42
# 二进制:0b 或 0B 前缀
bin_num = 0b101010
print(bin_num) # 42
# 八进制:0o 或 0O 前缀
oct_num = 0o52
print(oct_num) # 42
# 十六进制:0x 或 0X 前缀
hex_num = 0x2A
print(hex_num) # 42
2. 数字分隔符(Python 3.6+)
# 使用下划线提高可读性
bin_num = 0b1010_1010_1111_0000
oct_num = 0o7_6_5_4
dec_num = 1_000_000_000
hex_num = 0xFF_00_FF_00
print(bin_num) # 43632
print(dec_num) # 1000000000
二、进制转换函数
1. 其他进制 → 十进制
# 使用 int() 函数
print(int('101010', 2)) # 42(二进制 → 十进制)
print(int('52', 8)) # 42(八进制 → 十进制)
print(int('2A', 16)) # 42(十六进制 → 十进制)
print(int('FF', 16)) # 255
# 数字字符串默认按十进制处理
print(int('42')) # 42(十进制)
2. 十进制 → 其他进制
num = 42
# 二进制
print(bin(num)) # 0b101010
print(format(num, 'b')) # 101010(无前缀)
print(f"{num:b}") # 101010(f-string)
# 八进制
print(oct(num)) # 0o52
print(format(num, 'o')) # 52
print(f"{num:o}") # 52
# 十六进制
print(hex(num)) # 0x2a
print(format(num, 'x')) # 2a(小写)
print(format(num, 'X')) # 2A(大写)
print(f"{num:x}") # 2a
三、进制格式化输出
1. 使用 format() 函数
num = 255
# 二进制
print(format(num, 'b')) # 11111111
print(format(num, '08b')) # 11111111(宽度8,补零)
print(format(num, '#b')) # 0b11111111(带前缀)
# 八进制
print(format(num, 'o')) # 377
print(format(num, '#o')) # 0o377
# 十六进制
print(format(num, 'x')) # ff(小写)
print(format(num, 'X')) # FF(大写)
print(format(num, '#x')) # 0xff
print(format(num, '04x')) # 00ff(宽度4,补零)
2. 使用 f-string(推荐)
num = 255
print(f"{num:b}") # 11111111
print(f"{num:#b}") # 0b11111111
print(f"{num:08b}") # 11111111(补零到8位)
print(f"{num:o}") # 377
print(f"{num:x}") # ff
print(f"{num:X}") # FF
print(f"{num:#x}") # 0xff
# 动态宽度
width = 8
print(f"{num:0{width}b}") # 11111111
3. 格式化选项对比
| 格式 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 无前缀 | {:b} |
{:o} |
{:x} |
| 小写前缀 | {:#b} |
{:#o} |
{:#x} |
| 大写 | {:B} |
{:O} |
{:X} |
| 大写前缀 | {:#B} |
{:#O} |
{:#X} |
| 补零 | {:08b} |
{:04o} |
{:04x} |
最后来一个汇总表把:
| 进制 | 前缀 | 转换函数 | 格式化 |
|---|---|---|---|
| 二进制 | 0b/0B |
bin() |
{:b} |
| 八进制 | 0o/0O |
oct() |
{:o} |
| 十进制 | 无 | int() |
{:d} |
| 十六进制 | 0x/0X |
hex() |
{:x}/{:X} |
备注:
-
Python 原生支持四种进制字面量
-
int()函数可将各进制字符串转为十进制 -
bin()、oct()、hex()将十进制转为对应进制(带前缀) -
format()和 f-string 可控制进制格式(可带/不带前缀) -
位运算天然支持二进制操作
-
数字分隔符
_可提高大数字可读性