数制与单位制
数制是使用一组数字符号来表示数的体系。本节中主要介绍按照底数区分不同数制的进位制,并在此基础上引入计算机科学中常用的各种单位,然后介绍以两种不同底数为基础的单位制。
进位制
进位制是一种可以使用有限种数字符号来表示所有数的数制。一种进位制中可以使用的数字符号的数目,称为这种进位制的基数(base number)。进位制的核心是当一个位的数字达到基数时,将其重置为零并使更高位的数字加一。基数为
在对不同进制的数字进行数学运算时,可以通过角标来标识其进制,将 0b1101 和 1101B,八进制(octal)数可表示为 0o15 和 15o,十进制(decimal)数可表示为 13D,十六进制(hexadecimal)数可表示为 0xD1 和 D1H。
计算机科学中使用的进位制
计算机底层使用二进制来表示数据。为了阅读方便,有时会将二进制数据转换为易于和二进制互相转换的八进制和十六进制来进行阅读。而人类在生活中又通常使用十进制来表示数据。因此在研究计算机科学问题时,通常需要将二进制、八进制和十六进制与十进制进行互相转换,或者进行二进制、八进制和十六进制之间的互相转换。
不同进位制间的转换
将其他进制的数字转换为十进制
将
将十进制转换为二进制
将十进制转换为二进制,需要先将待转换的十进制数整数部分与小数部分分开。下文中将以
整数部分
对十进制数的整数部分除以二,记录其余数,然后把商再除以二并记录余数,一直进行这样的操作直至商为 0,然后将余数从最后一步往第一步读,即可获得所求二进制数的整数部分。
对
47 ÷ 2 = 23 ... 1
23 ÷ 2 = 11 ... 1
11 ÷ 2 = 5 ... 1
5 ÷ 2 = 2 ... 1
2 ÷ 2 = 1 ... 0
1 ÷ 2 = 0 ... 1得到的二进制数的整数部分为
小数部分
对十进制数的小数部分乘以二,记录其积的整数部分,再对积的小数部分一直进行这样的操作直至积的小数部分为 0,然后将积的整数部分从第一步往最后一步读,即可获得所求二进制数的小数部分。
对
0.375 × 2 = 0.75 (记录 0)
0.75 × 2 = 1.5 (记录 1)
0.5 × 2 = 1.0 (记录 1)得到的二进制数的小数部分为
合并整数部分与小数部分
将得到的二进制数的整数部分与小数部分相加,即为所求的二进制数。在这个例子中,所求的二进制数为
二进制、八进制和十六进制之间的互相转换
- 将二进制转换为八进制:将二进制数从左开始每三位分割成一段,然后将每一段转换成一个八进制数。
- 将二进制转换为十六进制:按照将二进制转换为八进制的方法,每四位分割成一段即可。
- 将八进制转换为二进制:把每位八进制数分解成三位二进制数。
- 将十六进制转换为二进制:把每位十六进制数分解成四位二进制数。
数据单位
比特(bit),缩写 b,又称位,是计算机科学中最基本的信息存储单位,是 binary digit 的混成词(portmanteau),表示一位二进制数,有 0 和 1 两种数值。
字节(byte),缩写 B,表示 8 位二进制数。即 1B=8b。
数据单位的两种标准
数据单位有两种标准,一种为 SI(International System of Units,国际单位制)制定的标准,采用十进制换算;另一种则为 IEC(International Electrotechnical Commission,国际电工委员会)制定的标准,采用二进制换算。
SI 数据单位
在国际单位制中,前缀 K(kilo)、M(mega)、G(giga)、T(tera)、P(peta)、E(exa)、Z(zetta)、Y(yotta)、R(ronna) 和 Q(quetta) 分别表示
这种十进制的定义在大部分消费类产品中被广泛使用。硬盘厂商通常用 GB、TB 来标示存储容量。
IEC 数据单位
在 IEC 单位制中,前缀 Ki(kibi)、Mi(mebi)、Gi(gibi)、Ti(tebi)、Pi(pebi)、Ei(exbi)、Zi(zebi)、Yi(yobi)、Ri(robi) 和 Qi(quebi) 分别表示
现代计算机的操作系统通常会以 GiB 来显示内存和存储容量。
思考🤔
小春购买了一块标示存储空间为 512GB 的移动硬盘,连接到电脑后却发现硬盘容量「缩水」了,你知道这是为什么吗?
数据单位的应用
在表示带宽(bandwidth)大小时,通常会用到 Mbps 等单 位。根据上文我们已经知道,1 Mb 相当于
TIP
千兆光纤的带宽大小为 1000Mbps,因此其理论峰值下载速度应该为 125MB/s。