关于计算机组成原理:计算机组成原理笔记数制Number-Systems

1次阅读

共计 3018 个字符,预计需要花费 8 分钟才能阅读完成。

十进制零碎

十进制零碎即 The Decimal System

在日常生活中,咱们每天都在应用逢十进一的数位(0、1、2、3、4、5、6、7、8、9)来示意数字,这种数制叫做十进制。
考查数字 83 的意义,能够示意成:
83 = (8 × 10) + 3
即八个 10 再加上一个 3;
考查数字 4728 的意义,能够示意成:
4728 = (4 × 1000) + (7 × 100) + (2 × 10) + 8
即四个 1000 加上七个 100 再加上两个 10 再加上一个 8。

从上得悉,咱们能够说,十进制的基数(base/radix)为 10。也即,十进制数是由每个数位的数字乘以 10 的 n 次幂,n 与数位的地位相干。例如:
83 = (8 × 101) + (3 × 100)
83 是由两个数位形成,最右边的数位为 最高(无效)数位 ,这里是 8;最左边的数位是 最低(无效)数位 ,这里是 3。最低数位的地位所对应的 10 的幂为 0,从右往左顺次加一。即,数位 3 为最低数位,故其 10 的幂为 0,示意为 3×100;往左挪动一位,数位为 8,其 10 的幂为 1,示意为 8×101,将所有数位相加失去的和即该十进制数,也即,8×101+ 3×100= 83
应用同样的办法拆解数字 4728,示意如下:
4728 = (4 × 103) + (7 × 102) + (2 × 101) + (8 × 02)

咱们应用同样的办法示意小数局部,只不过小数局部数位的 10 的幂为正数。其最大的数位的 10 的幂为 -1,从左向右其数位的 10 的幂顺次减 1。例如:
0.256 = (2 × 10-1) + (5 × 10-2) + (6 × 10-3)

在一个既有整数局部又有小数局部的十进制数中,其数位的 10 的幂也既有负数又有正数:
442.256 = (4 × 102) + (4 × 101) + (2 × 100) + (2 × 10-1) + (5 × 10-2) + (6 × 10-3)

应用表格示意上述数字的数位地位和其 10 的幂的关系:

4 7 2 2 5 6
百位 十位 个位 非常位 百分位 千分位
102 101 100 10-1 10-2 10-3
position 2 position 1 position 0 position -1 position -2 position -3

个别的,十进制数应用 X 来示意:
$$X = \{…d_2d_1d_0d_{-1}d_{-2}d_{-3}…\}$$
X的值为:
$$X=\sum_{i}(d_i×10^i)$$

按位计数零碎

按位计数零碎即 Positional Number Systems

十进制零碎是按位计数零碎的一种。
在一个按位计数零碎中,每个数字(Number)的数位(Digit)的地位应用 i 示意,数位的权用 ri 示意。其中,r为数字的基数(base/radix)。

个别的,在该零碎中,一个数字可示意为:
$$(…a_3a_2a_1a_0a_{-1}a_{-2}a_{-3}…)_r$$
其中,每一个数位 ai 都是一个整数,且0≤ai≤r

该数字的值为:

$$
… + a_3r^3 + a_2r^2 + a_1r^1 + a_0r^0 + a_{-1}r^{-1} + a_{-2}r^{-2} + a_{-3}r^{-3} + … = \sum_i(a_i × r^i)
$$

二进制零碎

二进制零碎即 The Binary System

在十进制零碎中,每个数位有十个数能够示意,即 0~9。在二进制零碎中,每个数位只有 0 或者 1 这两个数来示意。
为了防止在表白过程中引起的数制概念凌乱,咱们给每个数字加上数制下标。例如,十进制数 83 和 4728,咱们应用 8310和 472810示意。

二进制数中的 1 和 0 在十进制中的意义雷同:
02 = 010
12 = 110

如果要应用二进制数字示意十进制数字中更大的数字(>2),显著的,在二进制中则须要进位了:

$$
10_2 = (1 × 2^1) + (0 × 2^0) = 2_{10} \\
11_2 = (1 × 2^1) + (1 × 2^0) = 3_{10} \\
100_2 = (1 × 2^2) + (0 × 2^1) + (0 × 2^0) = 4_{10}
$$

小数局部仍然应用 10 的负次幂示意,这里不再举例。
个别的,应用二进制示意数字:

$$
Y = \{…b_2b_1b_0b_{-1}b_{-2}b_{-3}…\}
$$

Y 的值为:

$$
Y = \sum_i(b_i × 2^i)
$$

二进制和十进制的转换

将二进制数转换为十进制数非常容易,上述的笔记中曾经有很多例子。

而要将十进制数字转换为二进制数字,整数局部和小数局部则须要离开解决。

整数局部

如上述笔记所叙,在二进制中,整数局部可示意为:

$$
b_{m-1}b_{m-2}…b_2b_1b_0\quad(b_i= 0 或 1)
$$

该数字的值为:

$$
(b_{m-1} × 2^{m-1}) + (b_{m-2} × 2^{m-2}) + … + (b_1 × 2^1) + b_0
$$

假如咱们须要将十进制的整数 N 转换为二进制,能够将 N 除以 2,将失去一个商 N1 和余数R0,记为:

$$
N = 2 × N_1 + R_0\quad(R_0= 0 或 1)
$$

接着,咱们将商 N1 持续除以 2。令其新的商记为N2,新的余数记为R1,则:

$$
N_1 = 2 × N_2 + R_1\quad(R_1= 0 或 1)
$$

那么有:

$$
N = 2(2N_2 + R_1) + R_0 = (N_2 × 2^2) + (R_1 × 2^1) + R_0
$$

咱们能够将失去的商持续往下除以 2,因为 N > N1 > N2,最终会失去商:Nm-1 = 1(010 和 1 10除外)以及余数Rm-2 = 0 或 1 ,那么咱们能够失去:

$$
N = (1 × 2^{m-1}) + (R_{m-2} × 2^{m-2}) + … + (R_2 × 2^2) + (R_1 × 2^1) + R_0
$$

N 的二进制模式。
因而,将十进制数的整数局部转换为二进制数,只需将数字一直除以 2 即可,将失去的余数(非 0 即 1)逆序排列,就失去了二进制的整数局部。

例 1:将 1110 转换为二进制。
解:

例 2:将 2110 转换为二进制。
解:

小数局部

如上述笔记所叙,在二进制中,整数局部可示意为:

$$
b_{-1}b_{-2}b_{-3}…\quad(b_i= 0 或 1)
$$

该数字的值为:

$$
(b_{-1} × 2^{-1}) + (b_{-2} × 2^{-2}) + (b_{-3} × 2^{-3})…
$$

也能够记为:

$$
2_{-1} × (b_{-1} × 2^{-1} × (b_{-2} × 2^{-1} × (b_{-3} + …)…))
$$

上一个表达式正好提供了一个转换的思路。假如咱们要将数字 F(0 由十进制转换为二进制。由上可知,数字 F 能够示意为:

$$
F = 2^{-1} × (b_{-1} + 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + …)…))
$$

等式两边同乘以 2 得:

$$
2F = b_{-1} + 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + …)…)
$$

因为 0,显然的,2F 的整数局部b-1∈{0, 1}。咱们将残余的小数局部记为F1,且01<1,可得:

$$
F_1 = 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + …)…)
$$

为了求 b-1,咱们可反复上述步骤。以此类推,小数局部的转换算法行将小数一直乘以 2 即可。算法中每一步的被乘数都是上一步的积的小数局部,且积的整数局部肯定是 0 或 1,其形成之正序序列即二进制的小数局部。然而, 这个算法是不准确的,因为该算法的准确进行条件是直到积的小数局部等于 0 为止,而有时该算法可能会始终循环上来。因而,咱们须要另一个进行条件:将算法运行到咱们所须要的肯定精度即可。

例 1:将 0.8110 转换为二进制。
解:

例 2:将 0.2510 转换为二进制。
解:

正文完
 0