课 程 实 验 报 告
课程名称: 计算机系统基础
专业班级:
学 号:
姓 名:
指导教师:
报告日期:
年 月 日
计算机科学与技术学院
目录
实验 1:......................................................................................................1
实验 2:......................................................................................................7
实验 3:....................................................................................................24
实验总结...................................................................................................34
实验 1:
数据表示
1.1 实验概述
实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。
实验目标:加深对数据二进制编码表示的了解。
实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。
实验语言:c。
实验环境:linux
1.2 实验内容
需要完成 bits.c 中下列函数功能,具体分为三大类:位操作、补码运算和浮
点数操作。
1)位操作
表 1 列出了 bits.c 中一组操作和测试位组的函数。其中,“级别”栏指出各
函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输
出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请
查看 bits.c 中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用
的操作符的最大数量。
你也可参考 tests.c 中对应的测试函数来了解所需实现的功能,但是注意这些
测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正
确行为的参考。
表 1 位操作题目列表
级
函数名
别
1
2
2
功能
约束条件
lsbZero
将x的最低有效位(LSB)清零
仅能使用! ~ &
^ | + << >>
byteNot
byteXor
将x的第n个字节取反(字节从LSB开
仅能使用! ~ &
始到MSB依次编号为0-3)
^ | + << >>
比较x和y的第n个字节(字节从LSB
开始到MSB依次编号为0-3),若不
同,则返回1;若相同,则返回0
仅能使用! ~ &
^ | + << >>
最多操
作符数
5
6
20
3
3
3
4
logicalAnd
logicalOr
x&& y
x|| y
rotateLeft
将x循环左移n位
仅能使用! ~ &
^ | + << >>
仅能使用! ~ &
^ | + << >>
仅能使用! ~ &
^ | + << >>
parityCheck
若x有奇数个1,则返回1;否则,返
仅能使用! ~ &
回0
^ | + << >>
20
20
25
20
2)补码运算
表 2 列出了 bits.c 中一组使用整数的补码表示的函数。可参考 bits.c 中注释说
明和 tests.c 中对应的测试函数了解其更多具体信息。
表 2 补码运算题目列表
级
别
2
2
3
4
函数名
功能
约束条件
mul2OK
计算2*x,如果不溢出,则
仅能使用~ & ^ | +
返回1,否则,返回0
<< >>
mult3div2
计算(x*3)/2,朝零方向取整
仅能使用! ~ & ^ | +
<< >>
subOK
absVal
计算x –y,如果不溢出,则
仅能使用! ~ & ^ | +
返回1,否则,返回0
<< >>
求x的绝对值
仅能使用! ~ & ^ | +
<< >>
最多操
作符数
20
12
20
10
3)浮点数操作
表 3 列出了 bits.c 中一组浮点数二进制表示的操作函数。可参考 bits.c 中注释
说明和 tests.c 中对应的测试函数了解其更多具体信息。注意 float_abs 的输入参数
和返回结果(以及 float_f2i 函数的输入参数)均为 unsigned int 类型,但应作为单
精度浮点数解释其 32 bit 二进制表示对应的值。
表 3 浮点数操作题目列表
级
别
2
函数名
功能
约束条件
最多操
作符数
float_abs 返回浮点数‘|f|’的二进制 仅能使用任何整型/无符
10
表示,当输入参数是NaN
时,返回NaN
返回浮点数‘f’的强制整
型转换“(int)f”表示
号整型操作,包括||,&&
以及if,while控制结构
仅能使用任何整型/无符
号整型操作,包括||,&&
以及if,while控制结构
30
4
float_f2i
1.3 实验设计
根据题目要求,选择合适的操作符来编写代码。
具体设计参考实验过程中的代码注释。
1.4 实验过程
阅读相应的函数要求,利用合适的操作符编写代码。如下:
1. lsbZero 函数:
2. byteNot 函数:
3. byteXor 函数:
4. logicalAnd 函数:
5. logicalOr 函数:
图 1.1
图 1.2
图 1.3
图 1.4
6. rotateLeft 函数:
7. parityCheck 函数:
8. mul2OK 函数:
9. mult3div2 函数:
10. subOK 函数:
图 1.5
图 1.6
图 1.7
图 1.8
图 1.9
11. absVal 函数:
图 1.10
12. float_abs 函数:
13. float_f2i 函数:
图 1.11
图 1.12
1.5 实验结果
图 1.13
1. 使用 dlc 检查函数实现代码是否符合实验要求的编码规则。
a) 首先./dlc bits.c 直接检测是否有错误。如图 1.14 所示:
由图知,输出 Compilation Successful(1 warning),故 bits.c 文件编写
图 1.14
无误符合要求。
b) 然后用-e 选项调用 dlc,观察操作符数。如图 1.15 所示:
图 1.15
2. 使用 btest 检查函数实现代码的功能正确性。
a) 首先使用 make 编译生成 btest 可执行程序,如图 1.16 所示:
b) 然后调用 btest 命令检查 bits.c 中所有函数的功能正确性。如图
图 1.16
1.17 所示:
由图知,得分全拿到了,故 bits.c 文件中函数功能都实现了。
图 1.17
1.6 实验小结
这次实验让我更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。
尤其是加深对数据二进制编码表示的了解。通过使用有限类型和数量的运算操作
实现一组给定功能的函数来提高了我对数据表示方面的 C 语言编程能力。
总之这次实验的过程整体还是很愉快的,耗时不是很长但是收获很大!