《汇编程序设计与计算机体系结构:软件工程师教程》 —1.4.3 怎样表示无符号的整数
1.4.3 怎样表示无符号的整数
有两个与数制有关的技巧是应该掌握的,一个是在各种进制的数之间转换,另一个是完成加法这样的基本运算。表1-5列出了 0 至 15 之间的数所对应的十进制、二进制及十六进制表示方式。
表1-5 无符号整数在三种数制之间的对应关系
下面举 9 个例子来演示怎样在各种进制的无符号数之间转换以及如何做加法。
1.二进制→十进制:用量表来转换,表中列有从 20 至 2n 的 n + 1 个级别,其中 n = 二进制位数 - 1
2.二进制 → 十进制:用按位展开式来转换
3. 十进制 → 二进制:用除法来转换
4.计算保存十进制值所需的二进制位数
5. 二进制数的加法
6.十六进制→二进制 →十进制
7.十六进制 → 十进制:用按位展开式来转换
8.十进制 → 十六进制:用除法来转换
9.十六进制数的加法
提示:十进制数可以通过下列三种方式转换成以其他数为底的进制:
basen 量表(参见范例1-3及范例1-8)。
按位展开式:十进制值 = (Dn-1 × Bn-1) + (Dn-2 × Bn-2) + … + (D1 × B1) + (D0 × B0),其中B是底,D是各数位的具体取值,n 表示B进制数共有多少位(参见范例1-4及范例1-9)。
除法(参见范例1-5及范例1-10)。
范例1-3在8位二进制数与十进制数之间转换。这个例子采用的具体数值是二进制的 00010111,也就是十进制的 23(000101112 = 2310)。把二进制数转换成十进数时,先找出值为 1 的二进制位,然后在表中查出对应的十进制值,最后将其相加,这样就得到了与原数相等的十进制数。
范例1-3 二进制 ? 十进制(2n 量表)
范例 1-4 演示了怎样用按位展开式将二进制数转换成十进制数。这个例子采用的具体数值是二进制的 00010111,也就是十进制的 23。
范例1-4 二进制 → 十进制(按位展开式)
范例1-5演示怎样用除法把十进制数转化成二进制数。本例采用的十进制数是 42,相当于二进制的 101010。首先,把十进制数 42与二进制的底(也就是 2)相除,商是 21,余数是 0。把余数 0写在除法的右侧,在最终的转换结果中,它就是最低有效位。接下来,反复做除法,也就是用前一次除法所得的商除以 2,并将余数记在相应除法的右侧,直到所得的商小于 2 为止。此时的商只可能是 0 或 1,该数在最终的转换结果中是最高有效位。现在,把最后除法所得的商写在转换结果的最左边,然后将历次除法所得的余数从下往上依次写在商的后面。
范例 1-6 演示了怎样计算保存某个十进制值所需的二进制位数。比方说,要保存 42 这个十进制值,就需要用 6 个二进制位。
范例1-5 十进制 → 二进制(除法)
范例1-6 计算保存十进制值所需的二进制位数
学习指南:你可能想用二进制位数= ceiling(log2n)来计算保存十进制值所需的二进制位数,这对于大多数情况(例如范例 1-6 中的情况)来说是成立的,但如果要计算的十进制值恰好是 2 的幂,比方说 32,那么就会得出错误的结果。ceiling(log232) 的结果是 5,而实际上必须用 6 个二进制位才能将它表示出来,因为 3210 = 1000002。
范例1-7演示了二进制数的加法。规则很简单:
范例 1-7 二进制数的加法
范例1-8演示了怎样在十六进制、二进制与十进制之间转换。十六进制数转二进制数所依据的规律是:前者中的每个数位是由后者中的四个数位组成的。十六进制数转十进制数,可以根据以 16 为底的 16n 量表来做(这就像范例 1-3 所演示的那样:把二进制数转换成十进制数,可以根据以 2 为底的 2n 量表来做)。这个例子所用的具体数值是:00011010101101112 =
683910 = 1AB716。
范例 1-8 十六进制?二进制?十进制
范例1-9演示了怎样用按位展开式把十六进制数转换成十进制数。这个例子所用的具体数值是1AB716 = 683910。
范例 1-9 十六进制 → 十进制(按位展开式)
范例 1-10 演示了怎样用除法把十进制数转换成十六进制数。这个例子所用的具体数值是 803910 = 01F6716。计算过程与范例 1-5 类似,只不过每次都是除以 16,而不是除以 2。
范例 1-10 十进制 → 十六进制
范例 1-11 演示了怎样根据公式来对十六进制数做加法。即如果 xi + yi ≥ b,那么 zi = (zi MOD b),并向高位进1。这个公式也适用于其他进制(b 表示数制的底)。
这个例子所用的具体数值是4B216 + 6A416 = B5616,算式最左侧那一列所写的 xi,yi与zi,用来指代这三个数值的各个数位。
范例 1-11 十六进制数的加法
- 点赞
- 收藏
- 关注作者
评论(0)