Python每日打卡—进制那些事儿
python每日打卡 — 进制基础
应邀写一篇关于进制的文章,首先我们先来了解一下进制,什么是进制呢?
答:进制也就是进位计数制,是人为定义的带进位的计数方法
所以说,进制是一种计数方法,在我们的日常生活中,我们所用的数字0.1.2.3.4…9.计数,这是一种进制,称十进制,是因为我们常用的这种计数方法都是由 0—9 这十个数字所构成的,逢十进一,所以,几进制就是逢几进一。
一、 进制的表示
在python中想要使用二进制,可以在前面加上0b(前缀,进制标志),格式如下:
>>>print(0b10)
2
你会发现,它返回的是2,是一个十进制的数(注意是数,int类型),所以在编python的时候,创作者以十进制为主体,返回人们所熟悉的数字,也是能体现python是多么的亲民。
注意:计算机所有数据在底层都是以二进制的补码进行存储的,而人们看到的十进制数字是原码转换来的,所以计算机本身是看不懂十进制的数的
当然,不是说加上0b就可以将2进制转化为十进制了,它是指0b后面的数字是以二进制形式计数的,所以0b后面的数字只有0和1,但如果你强行输入别的数呢,咱们可以试一试:
>>>print(0b9)
SyntaxError: invalid token
计算机就会报错
进制可不止二进制十进制,还有八进制和十六进制,八进制的前缀是0o,十六进制的前缀是0x,它们的用法是相同的都是在前缀后加上各自的进制数,返回一个十进制的数,如下:
>>>print(0o10) #8进制下的10
8
>>>print(0x10) #16进制下的10
16
十进制就不需要前缀啦,想输出什么就输什么
但是我们日常工作时,一般不会已知其他进制求十进制的,一般的是由十进制求其他进制的,具体操作方法开始演示:
二、进制的转化
如果给你一个十进制的数,如何转换为其他进制呢,python中有内置函数可以解决这一问题:
>>>print(bin(10)) #十进制转化为二进制
>>>print('{:b}'.format(10))
0b1010
>>>print(oct(10)) #十进制转化为八进制
>>>print('{:o}'.format(10))
0o12
>>>print(hex(10)) #十进制转化为十六进制
>>>print('{:x}'.format(10))
0xa
注意: 这三个函数所返回的对应的进制数都是以 str 格式存储的
>>>print(type(bin(10)))
<class 'str'>
有些题目不会只让你输出对应的数的,它会很刁难你,让你输出固定长度的其他进制的数怎么办,format 格式化函数可以解决这个问题:
>>>print('{:06b}'.format(10)) #:b表示转化为二进制,06表示显示八位
001010 #高位用0补齐
>>>print('{:08o}'.format(10))
00000012
>>>print('{:08x}'.format(10))
0000000a
相反的如果给你的是其他进制的数,那么How to转化为十进制的数,这时,可以用到两个函数:int( ) or eval( ) 具体操作如下:
>>>print(int('0b1010',2))
>>>print(int('1010',2))
>>>print(eval('0b1010',2))
10
10
10
>>>print(int('0o12',8))
>>>print(int('12',8))
>>>print(eval('0o12',8)
10
10
10
>>>print(int('0xa',16))
>>>print(int('a',16))
>>>print(eval('0xa',16))
10
10
10
看程序分析,int()和 eval()很相似,他们均须输入其他进制的数和对应的进制数,但是有差别,eval 的 0b,0o,0x 是不可以省略掉的,但是如果使用int()的话,进制标志是可以省略的。
关于进制,咱们今天就讲些基础内容,如果后期需要的话,会更深层次的解析进制问题。