2024年4月27日发(作者:)
第 二 章 习 题 答 案
1. 给出以下概念的解释说明。
真值 机器数 数值数据 非数值数据 无符号整数 带符号整数
定点数 原码 补码 变形补码 溢出 浮点数
尾数 阶 阶码 移码 阶码下溢 阶码上溢
规格化数 左规 右规 非规格化数 机器零 非数(NaN)
BCD码 逻辑数 ASCII码 汉字输入码 汉字内码 机器字长
大端方式 小端方式 最高有效位 最高有效字节(MSB) 最低有效位
最低有效字节(LSB) 掩码 算术移位 逻辑移位 0扩展
符号扩展 零标志ZF 溢出标志OF 符号标志SF 进位/借位标志CF
2. 简单回答下列问题。
(1)为什么计算机内部采用二进制表示信息既然计算机内部所有信息都用二进制表示,为什么还要用
到十六进制或八进制数
(2)常用的定点数编码方式有哪几种 通常它们各自用来表示什么
(3)为什么现代计算机中大多用补码表示带符号整数
(4)在浮点数的基数和总位数一定的情况下,浮点数的表示范围和精度分别由什么决定两者如何相互
制约
(5)为什么要对浮点数进行规格化有哪两种规格化操作
(6)为什么有些计算机中除了用二进制外还用BCD码来表示数值数据
(7)为什么计算机处理汉字时会涉及到不同的编码(如,输入码、内码、字模码)说明这些编码中哪
些用二进制编码,哪些不用二进制编码,为什么
3.实现下列各数的转换。
(1)
10
= ()
2
= ()
8
= ()
16
(2)
2
= ()
10
= ()
8
= ()
16
= ()
8421
(3) (0101 1001
8421
= ()
10
= ()
2
= ()
16
(4)
16
= ()
10
= ()
2
4. 假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码表示。
+,–,+,–,+,–,+0,–0
5. 假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码表示。
+1001,–1001,+1,–1,+10100,–10100,+0,–0
6. 已知 [x]
补
,求x
(1)[
x
]
补
= (2)[
x
]
补
= (3)[
x
]
补
=01010010 (4)[
x
]
补
=
7. 某32位字长的机器中带符号整数用补码表示,浮点数用IEEE 754标准表示,寄存器R1和R2的内
容分别为R1:0000108BH,R2:8080108BH。不同指令对寄存器进行不同的操作,因而不同指令执行
时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器R1和R2的内容,则R1
和R2中操作数的真值分别为多少
(1) 无符号整数加法指令
(2) 带符号整数乘法指令
(3) 单精度浮点数减法指令
8. 假定机器M的字长为32位,用补码表示带符号整数。表中第一列给出了在机器M上执行的C语言程
序中的关系表达式,请参照已有的表栏内容完成表中后三栏内容的填写。
表 题8用表
关系表达式 运算类型 结果 说明
0 == 0U
–1 < 0
–1 < 0U
47 > –47 – 1
47U > –47 – 1
47 > (int) 48U
–1 > –2
(unsigned) –1 > –2
无符号整数
有符号整数
0
1
11…1B (2–1) > 00…0B(0)
011…1B (2–1) > 100…0B (–2)
3131
32
9. 在32位计算机中运行一个C语言程序,在该程序中出现了以下变量的初值,请写出它们对应的机器
数(用十六进制表示)。
(1)int x=-32768 (2)short y=522 (3)unsigned z=65530
(4)char c=’@’ (5)float a= (6)double b=
10. 在32位计算机中运行一个C语言程序,在该程序中出现了一些变量,已知这些变量在某一时刻的机
器数(用十六进制表示)如下,请写出它们对应的真值。
(1)int x:FFFF0006H (2)short y:DFFCH (3)unsigned z:FFFFFFFAH
(4)char c:2AH 5)float a:C4480000H (6)double b:C0000000H
11. 以下给出的是一些字符串变量在内存中存放的字符串机器码,请根据ASCII码定义写出对应的字符
串。指出代码0AH和00H对应的字符的含义。
(1)char *mystring1:68H 65H 6CH 6CH 6FH 2CH 77H 6FH 72H 6CH 64H 0AH 00H
(2)char *mystring2:77H 65H 20H 61H 72H 65H 20H 68H 61H 70H 70H 79H 21H 00H
12. 以下给出的是一些字符串变量的初值,请写出对应的机器码。
(1)char *mystring1="./myfile" (2)char *mystring2="OK, good!"
13. 已知C语言中的按位异或运算(“XOR”)用符号“^”表示。对于任意一个位序列
a
,
a
^
a
=0,C语
言程序可以利用这个特性来实现两个数值交换的功能。以下是一个实现该功能的C语言函数:
1 void xor_swap(int *x, int *y)
2 {
3 *y=*x ^ *y; /* 第一步 */
4 *x=*x ^ *y; /* 第二步 */
5 *y=*x ^ *y; /* 第三步 */
6 }
假定执行该函数时*
x
和*
y
的初始值分别为
a
和
b
,即*
x
=
a
且*
y
=
b
,请给出每一步执行结束后,
x
和
y
各自指向的内存单元中的内容分别是什么
14. 假定某个实现数组元素倒置的函数reverse_array调用了第13题中给出的xor_swap函数:
1 void reverse_array(int a[], int len)
2 {
3 int left, right=len-1;
4 for (left=0; left<=right; left++, right--)
5 xor_swap(&a[left], &a[right]);
6 }
当
len
为偶数时,reverse_array函数的执行没有问题。但是,当
len
为奇数时,函数的执行结果不
正确。请问,当
len
为奇数时会出现什么问题最后一次循环中的
left
和
right
各取什么值最后一次
循环中调用xor_swap函数后的返回值是什么对reverse_array函数作怎样的改动就可消除该问题
15. 假设以下表中的
x
和
y
是某C语言程序中的char型变量,请根据C语言中的按位运算和逻辑运算的
发布者:admin,转转请注明出处:http://www.yc00.com/news/1714183930a2397830.html
评论列表(0条)