《计算机组成与体系结构(原书第4版)》 —2.3 不同进制之间的转换
2.3 不同进制之间的转换
戈特弗里德·莱布尼茨(1646—1716)首次将十进制系统推广到基于其他基的计数系统中。他认为任何整数都可以由一系列的1和0表示。直到20世纪40年代末建成第一个二进制数字计算机之前,这个二进制系统只是一种数学上的好奇心。今天,它几乎成为每一个依赖数字控制的电子设备的核心。
由于其简单性,所以二进制系统可以很容易地转换为电子电路,同时,也便于人们理解。经验丰富的计算机专业人员可以很轻松地识别较小的二进制数(如表2-1所示)。但是,通常在转换较大值和分数时,需要一台计算器或者铅笔和纸。幸运的是,转换技术通过一点练习就可以很容易地掌握。我们将在下面的小节中展示一些较简单的转换技术。
表2-1 一些需要记住的数字
2.3.1 无符号整数的转换
我们从无符号数的基本转换开始。转换有符号数(可以是正数或负数)更复杂,重要的是,在继续转换有符号数之前需要首先了解转换的基本技术。
基数系统之间的转换可以通过使用重复减法或除留余数法来完成。减法比较麻烦,并且需要熟悉所使用的基数的幂。但是由于它是两种方法中更直观的,所以我们将首先解释它。
例如,假设我们要将10410转换为基数为3的数。我们知道34=81,它是小于104的3的最大幂,所以基数3的数字将会有5位数的宽度(每个基数幂一个:0~4)。我们用104减去81,差值为23。我们知道下一个幂为3,但33=27太大了,23不够减,所以注意到零“占位符”,并寻找需要多少次用32=9去分23。我们看到它可以执行两次并减去18。剩下5,从中减去31结果为3,留下2,2=2×30。这些步骤显示在例2.2中。
例2.2使用重复减法将10410转换为基数为3的数。
104-8123=34×1
-023=33×0
-185=32×2
-32=31×1
-20=30×2
10410=102123 除留余数方法是比重复减法更快更容易的方法。它采用的想法是使用基数的连续除法,实际上是基数幂的连续减法。我们顺序地除以基数,然后从底部到顶部读取得到的余数。该方法见例2.3。
例2.3转换10410到基数为3的数。
3104 2 104除以3结果是34,余数为2
334 1 34除以3结果是11,余数为1
311 2 11除以3结果是3,余数为2
33 0 3除以3结果是1,余数为0
31 1 1除以3结果是0,余数为1
0
从下向上读余数部分,得到:10410=102123。
此方法适用于任何基数,并且由于计算的简单性,所以它在从十进制到二进制的转换中特别有用。例2.4显示这样的转换过程。
例2.4把14710转换为二进制。
2147 1 147除以2结果是73,余数为1
273 1 73除以2结果是36,余数为1
236 0 36除以2结果是18,余数为0
218 0 18除以2结果是9,余数为0
29 1 9除以2结果是4,余数为1
24 0 4除以2结果是2,余数为0
22 0 2除以2结果是1,余数为0
21 1 1除以2结果是0,余数为1
0
从下向上读余数,得到:14710=10 010 0112。
具有N位的二进制数可以表示无符号整数的范围为0~2N-1。例如,4位可以表示十进制数0~15,而8位可以表示数0~255。当进行二进制数的算术操作时,可以由给定位数表示值的范围,这非常重要。考虑有一个4位长度的二进制数,我们希望把11112(1510)加到11112上。我们知道15加15是30,但30不能仅使用4位来表示。这是一个有溢出的例子,其发生在无符号二进制表示中,当算术运算的结果在给定位数允许的精度范围之外出现溢出时。在2.4节讨论有符号数字时,我们会更详细地解释溢出。
- 点赞
- 收藏
- 关注作者
评论(0)