ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python中的进制表示方式及转换方法探讨

2019-07-15 20:00:57  阅读:231  来源: 互联网

标签:进制 Python 转换方法 int print type 十进制 数字


在Python中,非十进制数字的表示方式为:

二进制:前面加0b,如0b1001

八进制:前面加0o,如0o3562

十六进制:前面加0x,如0x2af3

不同进制数字可直接相加,结果返回十进制:

x=0b100     #二进制的4
y=0xa       #十六进制的10
print(x+y,type(x),type(y))

执行结果:14 <class 'int'> <class 'int'>

下面按照不同的进制说明相关的转换方法:

bin(binary:其他进制数字→0b开头的二进制字符串)

x=bin(100)
y=bin(0x2a)
print(x,type(x))
print(y,type(y))

执行结果:
0b1100100 <class 'str'>
0b101010 <class 'str'>

oct(octonary:其他进制数字→0o开头的八进制字符串)

x=oct(100)
y=oct(0b100)
print(x,type(x))
print(y,type(y))

执行结果:
0o144 <class 'str'>
0o4 <class 'str'>

hex(hexadecimal:其他进制数字→0x开头的十六进制字符串)

x=hex(100)
y=hex(0b100)
print(x,type(x))
print(y,type(y))

执行结果:
0x64 <class 'str'>
0x4 <class 'str'>

int(integer:三种情况→十进制数字)

情况一:0?开头的其他进制数字→十进制数字

a=0b100
b=0xf
print(int(a))
print(int(b))

执行结果:
4
15

情况二:0?开头的其他进制字符串→十进制数字

a='0b100'
b='0xf'
print(int(a,base=0))
print(int(b,0))

执行结果:
4
15

情况三:不带0?的其他进制字符串→十进制数字

a='100'
b='f'
print(int(a,base=2))
print(int(b,16))

执行结果:
4
15
int()的第一个参数 int()的第二个参数
0?开头的其他进制数字 不输
0?开头的其他进制字符串 必输base=0,或简写为0
不带0?的其他进制字符串 必输base=进制数,或简写为进制数

注意:bin、oct、hex都直接接一个参数且输出的都是字符串。int与这三个不同,它分三种情况,接一个或两个参数,且输出结果是数字。

x=0b101
y=str(x)
print(x,type(x))
print(y,type(y))

执行结果:
5 <class 'int'>
5 <class 'str'>
注意:直接手输的0b、0o、0x开头的非十进制数字的数据类型都是int,对其print或转为字符串时,会先转化成十进制再转成字符串

补充:笔者自行推导的int2bin、bin2int

基于二进制与十进制的转化关系,笔者自己推导了输入、输出均为十进制数字的int2bin、bin2int函数:

int2bin:十进制转二进制(输入、输出均为十进制数字,如将十进制的7转换为十进制的111)

def int2bin(x):
    s=''
    while x>0:
        s=s+str(x % 2)
        x=x//2
    return s[::-1]
print(int2bin(7))

bin2int:二进制转十进制(输入、输出均为十进制数字,如将十进制的111转换为十进制的7)

def bin2int(x):
    y=str(x)
    power = len(y)-1
    s=0
    for i in y:
        s=s+int(i)*(2**power)
        power-=1
    return s
print(bin2int(111))

标签:进制,Python,转换方法,int,print,type,十进制,数字
来源: https://www.cnblogs.com/oddgod/p/11191058.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有