在前面两篇文章中介绍了基本的数据类型(Python——记录3——数据类型1,Python——记录4——数据类型2),其中讲到浮点数的计算是通过转换成二进制进行的,那么到底什么是二进制,以及计算机到底包含了哪些进制呢?
其实0和1是计算机最基本的储存单位,而0和1正是我们所说的二进制。在生活中,我们用到的进制为十进制,即“逢十进一”,那么最大单个数则为9,由此可知在二进制中,最大的数为1。此外,计算机也支持八进制和十六进制,同样,八进制最大的数为7;而十六进制最大的数则为f。
在Python中,默认的数值都是十进制,比如17、26、13等,当然也可以表示二进制,比如:
b = 0b1010110110print(b)c = 0b101210 # 最大数为1
可以看出二进制在Python中是以0b开头,b输出的值默认为十进制的694;但是如果在二进制中出现2的话那么便会报错,因为二进制最大的个位数为1。
八进制、十六进制
a = 0o34print(a)b = 0x23print(b)c = 0x2aprint(c)
对于八进制是以0o开头,同样八进制中最大的个位数值不能超过7;十六进制是以0x开头,但是十六进制最大值为15,可是如何表示两位数呢?
在十六进制中,计算机是用0~9、a~f来表示16个数的表示,a就表示10,以此类推,f表示15。
十进制转二进制
将十进制的数字转换成二进制只需要不断除以2,然后再将余数倒着从下往上写就是二进制,我们以13举例,如下图所示,最终结果为0b1101
了解了十进制转二进制的原理,那么Python中如何进行转换的呢?
a = 13print(bin(a))
bin()内置函数可以将数字转换成二进制,结果一样
二进制转八进制
在二进制中习惯用八位表示一个字节,比如1 0111,那么习惯上会补上0形成8位,及0001 0111;那么对于二进制转八进制中一般使用三个二进制来表示一个八进制,比如利用上面的二进制1101进行八进制转换:
将1101补齐成8位,为00001101,再以三个位数为一组进行分组,可分为001和101,再将001和101转换成十进制并进行组合即可,即1101转换成八进制为15;同样,Python也可以运用内置函数进行转换:
a = 0b1101print(oct(a))
通过oct()内置函数可以将数值转换成八进制,结果一样
二进制转十六进制
将二进制转为十六进制思路与转八进制相同,不同的是将二进制每四位分为一组,再转为十进制进行组合,1101转为十进制为13,那么对应的十六进制为d
a = 0b1101print(hex(a))
通过hex()内置函数可以将数值转换成十六进制,结果一样
二进制转十进制
在以上的进制转换中都涉及了二进制转十进制的问题,那么二进制如何转换成十进制的呢?仍以1101举例:
从最后位向前依次对应写上2^0、2^1、2^2……,再进行一对一相乘相加,即1*2^3+1*2^2+0*2^1+1*2^0=13,便是对应着十进制中的13
a = 0b1101print(a)
通过以上的学习,对应二进制、八进制、十进制和十六进制有了一个更加深刻的了解,以及对他们之间的相互转换也有了更加深刻的认识,那么之前提到的在整数型转换过程中是否真的只能出现数值了呢?我们下期再见
参考资料:
https://www.bilibili.com/video/BV1qK411n7gQ?p=25