华科_计算机系统实验报告课案
课 程 实 验 报 告
课程名称: 计算机系统基础
专业班级:
学 号:
姓 名:
指导教师:
报告日期: 年 月 日
计算机科学与技术学院
目录
实验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 位操作题目列表
级别函数名功能约束条件最多操作符数1lsbZero将x的最低有效位(LSB)清零仅能使用! ~ & ^ | + << >>52byteNot将x的第n个字节取反(字节从LSB开始到MSB依次编号为0-3)仅能使用! ~ & ^ | + << >>62byteXor比较x和y的第n个字节(字节从LSB开始到MSB依次编号为0-3),若不同,则返回1;若相同,则返回0仅能使用! ~ & ^ | + << >>203logicalAndx&& y仅能使用! ~ & ^ | + << >>203logicalOrx|| y仅能使用! ~ & ^ | + << >>203rotateLeft将x循环左移n位仅能使用! ~ & ^ | + << >>254parityCheck若x有奇数个1,则返回1;否则,返回0仅能使用! ~ & ^ | + << >>20
2)补码运算
表2列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。
表2 补码运算题目列表
级别函数名功能约束条件最多操作符数2mul2OK计算2*x,如果不溢出,则返回1,否则,返回0仅能使用~ & ^ | + << >>202mult3div2计算(x*3)/2,朝零方向取整仅能使用! ~ & ^ | + << >>123subOK计算x –y,如果不溢出,则返回1,否则,返回0仅能使用! ~ & ^ | + << >>204absVal求x的绝对值仅能使用! ~ & ^ | + << >>10
3)浮点数操作
表3列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。
表3 浮点数操作题目列表
级别函数名功能约束条件最多操作符数2float_abs返回浮点数‘|f|’的二进制表示,当输入参数是NaN时,返回NaN仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构104float_f2i返回浮点数‘f’的强制整型转换“(int)f”表示仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构30
1.3 实验设计
根据题目要求,选择合适的操作符来编写代码。
具体设计参考实验过程中的代码注释。
1.4 实验过程
阅读相应的函数要求,利用合适的操作符编写代码。如下:
lsbZero函数:
图1.1
byteNot函数:
图1.2
byteXor函数:
图1.3
logicalAnd函数:
图1.4
logicalOr函数:
图1.5
rotateLeft函