文章目录
一、进制转换原理
1、任意进制转换为十进制
如果数字在n进制下表示为
d
1
d
2
…
d
m
−
1
d
m
d_{1}d_{2}…d_{m-1}d_{m}
d1d2…dm−1dm,那么转换为十进制:
n
u
m
=
d
m
∗
n
0
+
d
m
−
1
∗
n
1
+
…
+
d
2
∗
n
m
−
2
+
d
1
∗
n
m
−
1
num=d_{m}*n^{0}+d_{m-1}*n^{1}+…+d_{2}*n^{m-2}+d_{1}*n^{m-1}
num=dm∗n0+dm−1∗n1+…+d2∗nm−2+d1∗nm−1
3进制逢3进1,只用0、1、2表示3进制的数字,如果3进制数字102转换成十进制数字则如下:
n
u
m
=
2
∗
3
0
+
0
∗
3
1
+
1
∗
3
2
=
11
num=2*3^{0}+0*3^{1}+1*3^{2}=11
num=2∗30+0∗31+1∗32=11
2、十进制转换为任意进制
这个过程刚好和上面相反,但是因为没有办法提前确定n进制下数字的位数,只能从低位一步一步求解,还以3进制为例,10进制数字11转换为3进制数字过程如下:
11%3=2
11//3=3 3%3=0
3//3=1 1%3=1
转换后的数字就是102
3、任意进制和十进制互相转换函数
如果用python3编码实现比较简单:
#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''
@File : binaryconverse.py
@Time : 2020/05/08 20:34:07
@Author : Schiller Xu
@Version : 1.0
@License : (C)Copyright 2020-2021, SchillerXu
@Desc : None
'''
#本代码只用于简单的进制转换
def converse_int_to(num,n):
s=''
while num>0:
s=str(num%n)+s
num=num//n
return s
def converse_to_int(num,n):
s=0
#转置字符串
num=str(num)[::-1]
lens=len(num)
for i in range(len(num)):
s=s+int(num[i])*pow(n,i)
return s
print(converse_to_int(102,3))
二、python3常用进制转换办法
工作和学习的时候接触的更多是二进制、八进制、十进制和十六进制,其中:
- 十进制:就是我们使用的数字,逢10近1位,用0-9表示数字;
- 二进制:逢2进1位,用0和1表示数字,比如0b1101,0b是二进制的标识;
- 八进制:逢8进1位,用0-7表示数字,比如0o101,0o是八进制的标识;
- 十六进制:逢16进1位,用0-9、A-F(表示10-15)表示数字,比如0x110,0x是十六进制的标识。
1、转换函数
- bin:转换为二进制;
- oct:转换为八进制;
- hex:转换为十六进制;
- int:转换为十进制整数;
bin、oct、hex函数只有一个参数,必须有进制的标识;int函数可以单独指定进制,所以能实现任意进制到十进制的转化。
示例如下:
>>> bin(10)
'0b1010'
>>> bin(0x14)
'0b10100'
>>>
>>> oct(10)
'0o12'
>>> oct(0b1101)
'0o15'
>>>
>>> hex(10)
'0xa'
>>> hex(0o11)
'0x9'
>>> int(0b1101)
13
>>> int('1101',2)
13
>>> int('1101',3)
37
2、format格式化
示例:
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
3、二进制和八进制相互转换
这里再提供一种心算的思路,八进制用0-7表示数字,二进制要想“完全”表示0-7得需要3位(8=
2
3
2^{3}
23),所以八进制转二进制的时候,只需要让每个数字用二进制表示展开即可,比如八进制0o33转换为二进制:
0o3-----0b011,0o33展开为0b011011,即0b11011,验证:
>>> bin(0o33)
'0b11011'
如果是二进制转换为八进制,反过来即可,从二进制低位开始,每三个数字一组,不够的补0,再化成八进制下的数字。
二进制和十六进制同样可以如此转化,推广开来,凡是进制之间存在指数关系(三进制和九进制),都能用这个办法。
三、参考资料
python使用format函数进行格式化
python3中的 十进制 二进制 八进制 十六进制表示及互相转换
进制之间的转换(二进制、八进制、十进制、十六进制)