在Python中,非十进制数字的表示方式为:
二进制:前面加0b,如0b1001
八进制:前面加0o,如0o3562
十六进制:前面加0x,如0x2af3
不同进制数字可直接相加,结果返回十进制:
x=0b100 #二进制的4 y=0xa #十六进制的10 print(x+y,type(x),type(y)) 执行结果:14
下面按照不同的进制说明相关的转换方法:
bin(binary:其他进制数字→0b开头的二进制字符串)
x=bin(100) y=bin(0x2a) print(x,type(x)) print(y,type(y)) 执行结果: 0b11001000b101010
oct(octonary:其他进制数字→0o开头的八进制字符串)
x=oct(100) y=oct(0b100) print(x,type(x)) print(y,type(y)) 执行结果: 0o1440o4
hex(hexadecimal:其他进制数字→0x开头的十六进制字符串)
x=hex(100) y=hex(0b100) print(x,type(x)) print(y,type(y)) 执行结果: 0x640x4
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)) 执行结果: 55 注意:直接手输的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 sprint(bin2int(111))