Skip to content

数制与单位制

数制是使用一组数字符号来表示数的体系。本节中主要介绍按照底数区分不同数制的进位制,并在此基础上引入计算机科学中常用的各种单位,然后介绍以两种不同底数为基础的单位制。

进位制

进位制是一种可以使用有限种数字符号来表示所有数的数制。一种进位制中可以使用的数字符号的数目,称为这种进位制的基数(base number)。进位制的核心是当一个位的数字达到基数时,将其重置为零并使更高位的数字加一。基数为 n 的进位制称为 n 进制。现在生活中最常用的进位制是十进制,这种进位制使用 10 个阿拉伯数字(0, 1, 2, ..., 9)进行计数。

在对不同进制的数字进行数学运算时,可以通过角标来标识其进制,将 n 进制数字 m 写作 mn,以此避免混淆。比如 12+12=102=210。除此之外,有时还会使用在数字前面或后面添加字母的方式来表示该数字所属的进位制。比如,二进制(binary)数可表示为 0b11011101B,八进制(octal)数可表示为 0o1515o,十进制(decimal)数可表示为 13D,十六进制(hexadecimal)数可表示为 0xD1D1H

计算机科学中使用的进位制

计算机底层使用二进制来表示数据。为了阅读方便,有时会将二进制数据转换为易于和二进制互相转换的八进制和十六进制来进行阅读。而人类在生活中又通常使用十进制来表示数据。因此在研究计算机科学问题时,通常需要将二进制、八进制和十六进制与十进制进行互相转换,或者进行二进制、八进制和十六进制之间的互相转换。

不同进位制间的转换

将其他进制的数字转换为十进制

n 进制的数字转换为十进制有一种较为通用的方法。如果将待转换的 n 进制数字表示为 a2a1a0.a1a2,则其对应的十进制为 +a2n2+a1n+a0+a1n1+a2n2+

将十进制转换为二进制

将十进制转换为二进制,需要先将待转换的十进制数整数部分与小数部分分开。下文中将以 47.37510 为例进行操作。

整数部分

对十进制数的整数部分除以二,记录其余数,然后把商再除以二并记录余数,一直进行这样的操作直至商为 0,然后将余数从最后一步往第一步读,即可获得所求二进制数的整数部分。

47.37510 的整数部分 47 进行如下操作:

47 ÷ 2 = 23 ... 1
23 ÷ 2 = 11 ... 1
11 ÷ 2 = 5 ... 1
5 ÷ 2 = 2 ... 1
2 ÷ 2 = 1 ... 0
1 ÷ 2 = 0 ... 1

得到的二进制数的整数部分为 101111

小数部分

对十进制数的小数部分乘以二,记录其积的整数部分,再对积的小数部分一直进行这样的操作直至积的小数部分为 0,然后将积的整数部分从第一步往最后一步读,即可获得所求二进制数的小数部分。

47.37510 的小数部分 0.375 进行如下操作:

0.375 × 2 = 0.75 (记录 0)
0.75 × 2 = 1.5 (记录 1)
0.5 × 2 = 1.0 (记录 1)

得到的二进制数的小数部分为 0.011

合并整数部分与小数部分

将得到的二进制数的整数部分与小数部分相加,即为所求的二进制数。在这个例子中,所求的二进制数为 101111.011

二进制、八进制和十六进制之间的互相转换

  • 将二进制转换为八进制:将二进制数从左开始每三位分割成一段,然后将每一段转换成一个八进制数。
  • 将二进制转换为十六进制:按照将二进制转换为八进制的方法,每四位分割成一段即可。
  • 将八进制转换为二进制:把每位八进制数分解成三位二进制数。
  • 将十六进制转换为二进制:把每位十六进制数分解成四位二进制数。

数据单位

比特(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) 分别表示 103106109101210151018102110241030。这些前缀被称为十进制前缀。通过将前缀与 b 或 B 连接在一起,即可合成一个数据单位。比如 Kb(103 比特)、GB(109 字节)等。

这种十进制的定义在大部分消费类产品中被广泛使用。硬盘厂商通常用 GB、TB 来标示存储容量。

IEC 数据单位

在 IEC 单位制中,前缀 Ki(kibi)、Mi(mebi)、Gi(gibi)、Ti(tebi)、Pi(pebi)、Ei(exbi)、Zi(zebi)、Yi(yobi)、Ri(robi) 和 Qi(quebi) 分别表示 2102202302402502602702802902100。这些前缀被称为二进制前缀。与十进制前缀不同的是,这些二进制前缀均为一个大写字母加上一个小写的 i 的形式。使用与 SI 数据单位相同的连接方式,即可合成不同的数据单位。

现代计算机的操作系统通常会以 GiB 来显示内存和存储容量。

思考🤔

小春购买了一块标示存储空间为 512GB 的移动硬盘,连接到电脑后却发现硬盘容量「缩水」了,你知道这是为什么吗?

数据单位的应用

在表示带宽(bandwidth)大小时,通常会用到 Mbps 等单 位。根据上文我们已经知道,1 Mb 相当于 106 个二进制位,而 Mbps 的最后一个字母 s 是我们在物理学中常见的基本时间单位(second)。中间的 p 是 per 的缩写,因此,我们可以把 Mbps 理解成 Mb 每秒。换句话说,Mbps 和 Mb/s 是等价的。而在表示数据传输速度时,我们又经常使用 MB/s。

TIP

千兆光纤的带宽大小为 1000Mbps,因此其理论峰值下载速度应该为 125MB/s。