进制转换
在计算机进行数据交换时,常常会有一个进制转换的过程,我们知道计算机只认0 和 1.在内存系统中,基本基于二进制进行运算的,但是有时候数据过于庞大,为了方便存储管理,计算机会使用十六进制存储数据,但是怎么实现数据转换呢?
我们人类由十根手指头,所以自然就使用十进制啦,每当我们数数字到10之后,于是就重0 开始继续数,所以逢十进一就这么来了。对于其它进制呢,也是同样的,比如最常见的二进制,也就是逢二进一,依次类推。
1 各种进制介绍
Python中的整数支持十进制、二进制、八进制和十六进制四种不同的表示方式,在转换之前,我们先了解以下各种进制
1.1.1 十进制
- 基数: 0 ~ 9 (一个十进制数上的每一位都是0到9中的一个)
- 进位: 逢10 进1
- 位权: 10的幂次方, 例如: 十进制数123中的1代表1乘以10的2次方,2代表2乘以10的1次方,3代表3乘以10的0次方
- 程序中的写法: 直接写, 例如: 100, 23, 67, 1298
1.1.2 二进制
- 基数: 0和1 (一个二进制数上的每一位的值只能是0和1)
- 进位: 逢2进1
- 位权: 2的幂次方, 例如: 二进制数110中的第一个1代表1乘以2的2次方,第二个1代表1乘以2的1次方,0代表0乘以2的0次方
- 程序中的写法:加前缀0b/0B, 例如: 0b1101, 0B1011
1.1.3 八进制
- 基数: 0 ~ 7 (一个八进制数上的每一位都是0~7中的一个)
- 进位:逢8进1
- 位权:8的幂次方,例如:八进制数56中的5代表5乘以8的1次方,6代表6乘以8的0次方
- 程序中的写法:加前缀0o/0O, 例如: 0o23, 0O172
1.1.4 十六进制
- 基数:09,af/A~F (一个十六进制数上的每一位是数字09或者字母af/A~F)
- 进位:逢16进1
- 位权:16的幂次方,例如:十六进制数a1中的a代表10乘以16的1次方,6代表6乘以16的0次方
- 程序中的写法:加前缀0x/0X,例如:0xa6,0x12f
2 进制之间的转换
Python提供了三个函数用于进制的转换,分别是bin()、oct()、hex()用于二进制、八进制和十六进制的转换,其用法如下:
-
转十进制
# 1. 其他进制转十进制: 使用print函数打印其他进制的数,打印结果就是十进制 print(0b11011) # 查看二进制数11011对应的十进制 print(0o56) # 查看八进制数56对应的十进制 print(0x1fa) # 查看十六进制数1fa的十进制
结果:
27 46 506
-
转二进制
# 2. 其他进制转二进制: 获取函数bin()的结果 print(bin(100)) # 查看十进制数100对应的二进制 print(bin(0o56)) # 查看八进制数56对应的二进制 print(bin(0x1fa)) # 查看十六进制数1fa对应的二进制
结果:
0b1100100 0b101110 0b111111010
-
转八进制
print(oct(100)) # 查看十进制数100对应的八进制 print(oct(0b11011)) # 查看二进制数11011对应的八进制 print(oct(0x1fa)) # 查看十六进制数1fa对应的八进制
结果:
0o144 0o33 0o772
-
转十六进制
print(hex(100)) # 查看十进制数100对应的十六进制 print(hex(0b11011)) # 查看二进制数11011对应的十六进制 print(hex(0o56)) # 查看八进制数56对应的十六进制
结果:
0x64 0x1b 0x2e
不同的进制只是数字的不同的表示方式,使用的时候并无区别,在程序中,十进制数能做的,其他进制都可以,示例如下:
print(10 + 20)
print(0b1010 + 0b10100)
print(0o12 + 0o24)
print(0xa + 0x14)
结果:
30
30
30
30