在上一小节中我们学习了python的字符编码,我们学习到ASCII码是采用一个字节(8个二进制位)长度来编码的,在最后的例子中我们又使用了16进制的格式来查看汉字的Unicode和utf-8编码。
那么什么是二进制数,什么是十六进制数?他们之间如何转换?又如何与我们熟悉的十进制数做转换?
我们很熟悉10进制的计数法,采用0~9,10个数字计数,每逢“十进一”,10称为基数或者底数。
当我们书写时,约定左边是高位,右边是低位,当低位的数字超过10时,向高位进1,低位用0占位。
9
+ 1
------
10
这就是10进制计数法。10进制很适合我们人类计数,因为人类正好有10个手指来数数。但是对计算机来说比较麻烦,需要表示0~9十种状态。
如果我们把基数10换为2,即逢2进一,就称二进制计数法。
1
+1
------
10
二进制计数法只有两种状态0和1,这在计算机的电路实现上很简单,所以计算机内部是采用2进制计数法的。
二进制转换为十进制很简单比如:
十进制转换为二进制方法为:
整数部分,把十进制转成二进制一直分解至商数为0。从最底左边数字开始读,之后读右边的数字,从下读到上。 小数部分,则用其乘2,取其整数部分的结果,再用计算后的小数部分依此重复计算,算到小数部分全为0为止,之后读所有计算后整数部分的数字,从上读到下。(维基百科)
在实际应用中当采用二进制表示很大的数时,需要很多个二进制位,书写和阅读都不方便,转换成十进制又不是很方便。
后来发现采用16进制数表示很方便,因为将4个Bit化成单独的16进制数字不太困难,1字节正好可以表示成2个连续的16进制数字。
于是16进制在计算机编码中得到广泛的应用。
参考资料:
进位制:http://zh.wikipedia.org/wiki/%E8%BF%9B%E4%BD%8D%E5%88%B6
二进制:http://zh.wikipedia.org/zh-cn/%E4%BA%8C%E8%BF%9B%E5%88%B6
十六进制:http://zh.wikipedia.org/zh-cn/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6