32. 一个“字”的宽度就是一个“机器字长”吗?
第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照
## 32. 一个“字”的宽度就是一个“机器字长”吗?
答:不是。“机器字长”是计算机的一个非常重要的指标。通常称32位机器或64位机器,就是指机器的字长是32位或64位。一般情况下,机器字长定义为CPU中一次能够处理的二进制整数的位数,实际上就是CPU中整数运算数据通路的位数。
“字”作为信息宽度的计量单位,对于某个系列机来说,其字宽总是固定的。例如,在80x86系列中,一个字的宽度为16位,因此,32位是双字,64位是四字。在IBM 303X系列中,一个字的宽度为32位,所以16位为半字,32位为单字,64位为双字。
一个“字”的宽度可以不等于机器字长。例如,在Intel微处理器中,从80386开始就至少都是32位机器了,即机器字长至少为32位,但其字的宽度都定义为16位。
## 33. 在表示存储容量和带宽时经常用到 KB、MB、GB、TB 等表示数据量的单位,为什么有的时候 1MB 等于 $10^{6} \mathrm{~B}$,有的时候又等于 $2^{39} \mathrm{~B}$ 呢?
答:当表示二进制存储容量时,度量单位用2的幂次,例如,若主存容量为1GB,则表示主存有 $2^{39}\mathrm{B}$。当描述距离、频率等数值时,通常用10的幂次表示,因而,在由时钟频率计算得到的总线带宽或外设数据传输率中,度量单位表示的也是10的幂次。例如,若总线带宽为 $1\mathrm{GB / s}$,表示总线每秒传输 $10^{9}\mathrm{B}$。为区分这种差别,通常用K表示1024,用k表示1000,而其他前缀字母均为大写,表示的大小由其上下文决定。
## 2.5 单项选择题
1. 计算机中的所有信息都以二进制表示的原因是( )。
A. 信息处理方便
B. 运算速度快
C. 节约元器件
D. 物理器件特性所致
2. 引入八进制和十六进制的目的是( )。
A. 节约元件
B. 实现方便
C. 可以表示更大范围的数
D. 用于等价地表示二进制,便于阅读和书写
3. 108对应的十六进制形式是( )。
A. 6CH
B. B4H
C. 5CH
D. 63H
4. 下列数中最小的数为( )。
A. $(1001\ 0110)_2$
B. $(63)_8$
C. $(1001\ 0110)_{\mathrm{BCD}}$
D. $(2F)_{16}$
5. 下列数中最小的数为( )。
A. $(1110\ 0101)_2$
B. $(93)_{10}$
C. $(1001\ 0010)_{\mathrm{BCD}}$
D. $(5A)_{16}$
6. 负零的补码表示为( )。
A. $1\ 00\cdots 00$
B. $0\ 00\cdots 00$
C. $0\ 11\cdots 11$
D. $1\ 11\cdots 11$
<!-- page: 38 -->
7. $[X]_{\mathrm{H}} = X_0.X_1X_2\dots X_n$($n$ 为整数),它的模是( )。
A. $2^{n - 1}$
B. $2^{n}$
C. 1
D. 2
8. $[X]_{\mathrm{H}} = X_0X_1X_2\dots X_n$($n$ 为整数),它的模是( )。
A. $2^{n + 1}$
B. $2^{n}$
C. $2^{n} + 1$
D. $2^{n} - 1$
9. 下列编码中,零的表示形式是唯一的编码是( )。
A. 反码
B. 原码
C. 补码
D. 原码和补码
10. 在下列有关补码和移码关系的叙述中,错误的是( )。
A. 相同位数的补码和移码表示具有相同的表数范围
B. 零的补码和移码表示相同
C. 同一个数的补码和移码表示,其数值部分相同,而符号相反
D. 一般用移码表示浮点数的阶,而补码表示定点整数
11. 计算机内部的带符号整数大多用补码表示,以下是一些关于补码特点的叙述:
① 零的表示是唯一的
② 符号位可以和数值部分一起参加运算
③ 和其真值的对应关系简单、直观
④ 减法可用加法来实现
以上叙述中,( )是补码表示的特点。
A. ①和②
B. ①和③
C. ①、②和③
D. ①、②和④
12. 假定某数 $X = -01001010\mathrm{B}$,在计算机内部的表示为1011 0110B,则该数所用的编码方法是( )。
A. 原码
B. 反码
C. 补码
D. 移码
13. 设寄存器位数为8位,机器数采用补码形式(含一位符号位),则十进制数-26存放在寄存器中的内容为( )。
A. 26H
B. 9BH
C. E6H
D. 5AH
14. -1029的16位补码用十六进制表示为( )。
A. 0405H
B. 7BFBH
C. 8405H
D. FBFBH
15. 考虑以下 C 语言代码:
short si = -8196;
unsigned short usi = si;
执行上述程序段后,usi 的值是( )。
A. 8196
B. 34572
C. 57339
D. 57340
16. 设 $[X]_{\mathrm{量}} = 1, X_1 X_2 X_3 X_4$,当满足( )时,$X > -1/2$ 成立。
A. $X_{1}$ 必须为 $1, X_{2}, X_{3}, X_{4}$ 至少有一个为 1
B. $X_{1}$ 必须为 $1, X_{2}, X_{3}, X_{4}$ 任意
C. $X_{1}$ 必须为 $0, X_{2}, X_{3}, X_{4}$ 至少有一个为 1
D. $X_{1}$ 必须为 $0, X_{2}, X_{3}, X_{4}$ 任意
17. 设 $X = -1011$,则8位补码 $[X]_{\mathrm{H}}$ 为( )。
A. 1000 0101
B. 1000 1011
C. 1111 0101
D. 1111 1011
18. 16位无符号数所能表示的数值范围是( )。
<!-- page: 39 -->
A. $0 \sim (2^{16} - 1)$
B. $0 \sim (2^{15} - 1)$
C. $0 \sim 2^{16}$
D. $0 \sim 2^{15}$
19. 16位补码整数所能表示的范围是( )。
A. $-2^{15} \sim + (2^{15} - 1)$
B. $-(2^{15} - 1) \sim + (2^{15} - 1)$
C. $-2^{16} \sim + (2^{16} - 1)$
D. $-(2^{16} - 1) \sim + (2^{16} - 1)$
20. 若浮点数尾数用补码表示,则下列数中为规格化尾数形式的是( )。
A. 1.110 0000
B. 0.011 1000
C. 0.010 1000
D. 1.000 1000
21. 若浮点数尾数用原码表示,则下列数中为规格化尾数形式的是( )。
A. 1.110 0000
B. 0.011 1000
C. 0.010 1000
D. 1.000 1000
22. 用于表示浮点数阶码的编码通常是( )。
A. 原码
B. 补码
C. 反码
D. 移码
23. 假定某数采用 IEEE 754 单精度浮点数格式表示为 $45100000 \mathrm{H}$,则该数的值是( )。
A. $(+1.125)_{10} \times 2^{10}$
B. $(+1.125)_{10} \times 2^{11}$
C. $(+0.125)_{10} \times 2^{11}$
D. $(+0.125)_{10} \times 2^{10}$
24. 假定某数采用 IEEE 754 单精度浮点数格式表示为 C820 0000H,则该数的值是( )。
A. $(-1.01)_{10} \times 2^{17}$
B. $(-1.01)_{10} \times 2^{144}$
C. $(-1.25)_{10} \times 2^{17}$
D. $(-1.25)_{10} \times 2^{144}$
25. 假定变量 $i, f$ 的数据类型分别是 int, float。已知 $i = 12345, f = 1.2345 \mathrm{e}3$,则在一个32位机器中执行下列表达式时,结果为“假”的是( )。
A. $i = (int)(float)i$
B. $i = (int)(double)i$
C. $f = (float)(int)f$
D. $f = (float)(double)f$
26. IBM 370 的短浮点数格式中,总位数为 32 位,基数为 16,左边第一位 $(b_0)$ 为数符,随后 7 位 $(b_1 \sim b_7)$ 为阶码,用移码表示,偏置常数为 64,右边 24 位 $(b_8 \sim b_{31})$ 为 6 位十六进制原码小数表示的尾数,采用规格化形式。若将十进制数 $-265.625$ 用该浮点数格式表示,则应表示为( )(用十六进制形式表示)。
A. C310 9A00H
B. 4310 9A00H
C. 8310 9A00H
D. 0310 9A00H
27. 假定两种浮点数表示格式的位数都是32位,但格式1的阶码长、尾数短,而格式2的阶码短、尾数长,其他所有规定都相同,则它们可表示的数的精度和范围为( )。
A. 两者可表示的数的范围和精度均相同
B. 格式 1 可表示的数的范围更小,但精度更高
C. 格式 2 可表示的数的范围更小,但精度更高
D. 格式 1 可表示的数的范围更大,且精度更高
28. 在一般的计算机系统中,西文字符编码普遍采用( )。
A. BCD 码
B. ASCII 码
C. 格雷码
D. CRC 码
29. 假定某计算机按字节编址,采用小端方式,有一个 float 型变量 $x$ 的地址为 FFFF C000H,$x = 12345678 \mathrm{H}$,则在内存单元 FFFF C001H 中存放的内容是( )。
A. 1234H
B. 34H
C. 56H
D. 5678H
30. 下面有关机器字长的叙述中,错误的是( )。
<!-- page: 40 -->
A. 机器字长是指 CPU 中定点运算数据通路宽度
B. 机器字长一般与 CPU 中寄存器的位数有关
C. 机器字长决定了数的表示范围和表示精度
D. 机器字长对计算机硬件的造价没有影响
31. 下面是关于计算机中存储器容量单位的叙述,其中错误的是( )。
A. 最小的计量单位为位(b),表示一位 0 或 1
B. 最基本的计量单位是字节(B),1 字节等于 8b
C. 一台计算机的编址单位、指令字长和数据字长都一样,且是字节的整数倍
D. 主存容量为 1KB,其含义是主存中能存放 1024B 的二进制信息
【参考答案】
1. D
2. D
3. A
4. D
5. D
6. B
7. D
8. A
9. C
10. B
11. D
12. C
13. C
14. D
15. D
16. D
17. C
18. A
19. A
20. D
21. A
22. D
23. B
24. C
25. C
26. A
27. C
28. B
29. C
30. D
31. C
【部分题目的答案解析】
第 15 题
因为 $-8196 = -(8192 + 4) = -10000000000100\mathrm{B}$,所以 si 和 usi 的机器数均为 1101 1111 1111 1100B,作为无符号数解释时的真值为 $2^{16} - 1 - 2^{13} - 2 - 1 = 65535 - 8192 - 3 = 57340$。
第 16 题
符号位为 1,表示 $X$ 为负数。因为 $[X]_{\mathrm{即}} = 1.X_1X_2X_3X_4$,所以 $X = -0.X_1X_2X_3X_4$。
要使 $X > -1/2$ 成立,相当于 $-0.X_1X_2X_3X_4 > -1/2$ 成立,必须 $0.X_1X_2X_3X_4 < 1/2$,此时,$X_1$ 必须是 0,而 $X_2, X_3, X_4$ 任意。因此,选项 D 正确。
第 17 题
已知 $X = -1011 = -0001011$,符号位为 1,数值部分各位取反,末位加 1,即 $[X]_{\mathrm{界}} = 11110101$,正确的选项为 C。
第 25 题
对于选项 A,因为 $i = 12345 < 16384 = 2^{14}$,所以 $i$ 的有效位数不会超过 $15 < 24$,因而转换为 float 型数据后,不会发生有效位数丢失,再转换为 int 型数据,与原来的值完全相同。
对于选项 B,因为 $i$ 的有效位数不会超过 $15 < 53$,因而转换为 double 型数据后,不会发生有效位数丢失,再转换为 int 型数据,与原来的值完全相同。
对于选项 C,因为 $f = 1234.5$,有小数部分,转换为 int 型数据时,小数部分被丢弃,再转换为 float 型数据后,与原来的值不相同。
对于选项 D,因为 double 型数据的有效位数比 float 型的多,表数范围比 float 型的大,因而将 float 型数据转换为 double 型数据,其值不会发生任何变化,再转换为 float 型数据,与原来的值完全相同。
综上所述,答案为选项 C。
第 26 题
因为 IBM 370 浮点数格式的基数为 16,所以,将 $-265.625$ 先转换为十六进制表示
<!-- page: 41 -->
形式:
$$
-265.625 = -100001001.101B = -000100001001.1010B = (-0.109A)_{16} \times 16^2
$$
根据 IBM 370 的短浮点数格式知:$b_0 = 1, b_1 \sim b_7 = 1000000 + 3 = 1000011B$,即 $b_0 \sim b_7 = 11000011B = C3H$,尾数 $b_8 \sim b_{31} = 109A00H$。因此,$-265.625$ 的短浮点数用十六进制表示为 $C3109A00H$。
## 2.6 分析应用题
1. 实现下列各数的转换。
(1) $(25.8125)_{10} = (?)_2 = (?)_8 = (?)_{16}$
(2) $(101101.011)_2 = (?)_{10} = (?)_8 = (?)_{16} = (?)_{8421}$
(3) $(010110010110.0011)_{8421} = (?)_{10} = (?)_2 = (?)_{16}$
(4) $(4E.C)_{16} = (?)_{10} = (?)_2$
【分析解答】
(1) $(25.8125)_{10} = (11001.1101)_2 = (31.64)_8 = (19.D)_{16}$。
(2) $(101101.011)_2 = (45.375)_{10} = (55.3)_8 = (2D.6)_{16} = (01000101.001101110101)_{8421}$。
(3) $(010110010110.0011)_{8421} = (596.3)_{10} = (1001010100.010011\cdots)_2 = (254.4\cdots)_{16}$。
(4) $(4E.C)_{16} = (78.75)_{10} = (1001110.11)_2$。
2. 假定机器数为 8 位(1 位符号,7 位数值),写出下列各二进制数的原码和补码表示。
$$
+0.1001, -0.1001, +1.0, -1.0, +0.010100, -0.010100, +0, -0
$$
【分析解答】
上述各二进制数的原码和补码表示在表 2.1 中给出。
表 2.1 小数的原码和补码表示
[tbl-6.md](tbl-6.md)
3. 假定机器数为 8 位(1 位符号,7 位数值),写出下列各二进制数的补码和移码表示。
$$
+1001, -1001, +1, -1, +10100, -10100, +0, -0
$$
【分析解答】
上述各二进制数的补码和移码表示在表 2.2 中给出。
<!-- page: 42 -->
表 2.2 整数的补码和移码表示
[tbl-7.md](tbl-7.md)
4. 设 $[x]_{\#} = 1, x_1 x_2 x_3 x_4$,当 $x_1 x_2 x_3 x_4$ 满足什么条件时 $x < -1/2$ 成立?
【分析解答】
补码的编码规则是:“正数的补码,其符号位为0,数值位不变;负数的补码,其符号位为1,数值位各位取反,末位加1”。从形式上来看,$[x]_{\#}$ 的符号位为1,故 $x$ 一定是负数。因此,绝对值越大,数值越小,因而要满足 $x < -1/2$,则 $x$ 的绝对值必须大于 $1/2$。因此,$x_1$ 必须为 $0, x_2 x_3 x_4$ 至少有一个为1,这样,各位取反末位加1后,$x_1$ 一定为 $1, x_2 x_3 x_4$ 中至少有一个为1,使得 $x$ 的绝对值保证大于 $1/2$。因此,$x_1$ 必须为 $0, x_2 x_3 x_4$ 至少有一个为1。
5. 已知 $[x]_{\#}, \求 x$。
(1) $[x]_{\#} = 11100001$
(2) $[x]_{\#} = 10000000$
(3) $[x]_{\#} = 01111111$
(4) $[x]_{\#} = 11111111$
【分析解答】
(1) $x = -11111B = -31$
(2) $x = -10000000B = -128$
(3) $x = 1111111B = 31$
(4) $x = -00000001B = -1$
6. 将以下十进制数表示成无符号整数时至少需要几个二进位?
156,820,1200,4503
【分析解答】
$2^{7} - 1 < 156 < 2^{8} - 1$,故至少需要8位。
$2^{9} - 1 < 820 < 2^{10} - 1$,故至少需要10位。
$2^{10} - 1 < 1200 < 2^{11} - 1$,故至少需要11位。
$2^{12} - 1 < 4503 < 2^{13} - 1$,故至少需要13位。
7. 假定某程序中定义了三个变量 $x, y$ 和 $z$,其中 $x$ 和 $z$ 为 int 型,$y$ 为 short 型。当 $x = -258, y = -20$ 时,执行赋值语句 $z = x - y$ 后,存放 $z$ 的寄存器中的内容是多少?
【分析解答】
现代计算机中的带符号整数都是用补码表示的,因此,本题可以直接计算 $z$ 的值,然后将 $z$ 的补码形式求出来,也可以先将 $x$ 和 $y$ 的补码求出,再通过补码加法求出 $z$ 的补码表示。显然,前一种思路效率较高。对于前一种思路,执行赋值语句后,$z = -238$,因此,问题就
<!-- page: 43 -->
变成了求-238的补码表示,其结果为[-000 0000 0000 0000 0000 0000 0000 1110 1110]N = 1111 1111 1111 1111 1111 1111 0001 0010 = FFFF FF12H。
8. 假定 sizeof(int) = 4,表 2.3 中第一列给出了 C 语言程序中的关系表达式,请参照已有表栏内容完成表中后三栏内容的填写,并对其中的关系表达式“2147483647 < (int) 2147483648U”的结果进行说明。
表 2.3 关系表达式的运算结果
[tbl-8.md](tbl-8.md)
【分析解答】
按照题目要求填表如表 2.4 所示。
表 2.4 与表 2.3 对应的关系表达式的运算结果
[tbl-9.md](tbl-9.md)
8 个关系表达式运算结果分别是 1、1、0、1、0、0、1、1,其中 1 表示“真”,0 表示“假”。关系表达式“2147483647 < (int) 2147483648U”的结果为“假”。因为小于号右边的“2147483648U”是一个带后缀 U 的整数,因而是无符号整数,其机器数为“100…0”(1 后面跟 31 个 0),其值为 $2^{31}$。强制类型转换为 int 型后,其真值为 $-2^{31}$,即“-2147483648”,显然“2147483647 < -2147483648”是不成立的,即结果为“假”。
9. 以下是一个 C 语言程序,用来计算一个数组 $a$ 中每个元素的和。当参数 len 为 0 时,返回值应该是 0,但在执行时,却发生了存储器访问异常。请问这是什么原因造成的,并说明程序应该如何修改。
<!-- page: 44 -->
```c
1 float sum_elements(float a[], unsigned len)
2 {
3 int i;
4 float result = 0;
5
6 for (i = 0; i <= len - 1; i++)
7 result += a[i];
8 return result;
9 }
```