python3进制转换原理

一、进制转换原理

1、任意进制转换为十进制

如果数字在n进制下表示为 d 1 d 2 … d m − 1 d m d_{1}d_{2}…d_{m-1}d_{m} d1d2dm1dm,那么转换为十进制:
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=dmn0+dm1n1++d2nm2+d1nm1

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=230+031+132=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中的 十进制 二进制 八进制 十六进制表示及互相转换
进制之间的转换(二进制、八进制、十进制、十六进制)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值