中国海洋大学计算机基础实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国海洋大学计算机科学与技术系
实验报告
姓名:学号:专业:
科目:计算机系统原理题目:Lab1的实验
实验时间: 2019/11/09
实验成绩: 35/35 实验教师:
一、实验目的:
1更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。
2.实验中使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中加深对数据二进制编码表示的了解
3.熟悉linux基本操作命令,其中常用工具和程序开发环境
4.完善bits.c的各个函数,实现其功能,并通过.btest的测试
二、实验要求
1.尽快熟悉linux基本操作命令,还有其中常用工具和程序开发环境
2.除浮点数函数实现外,只能使用顺序程序结构,禁用if, do, while, for, switch等。
⏹有限操作类型,!~ & ^ | + << >> 各函数不一样
⏹禁用(!=、==、&&、|| 等组合操作符)
⏹常量值范围0~255
⏹禁用强制类型转换
⏹禁用整型外的任何其它数据类型
⏹禁用定义和宏
⏹不得使用函数
⏹具体要求可参看bits.c各函数框架的注释
⏹可以使用循环和条件控制;
⏹可以使用整型和无符号整型常量及变量(取值不受[0,255]限制);
⏹不使用任何浮点数据类型、操作及常量。
⏹可以使用int和unsigned两种整型数据
⏹禁用浮点数据类型、struct、union或数组结构。
⏹浮点数函数均使用unsigned型数据表示浮点数据。
⏹float_abs等函数必须能处理全范围的变量值,包括(NaN)和infinity。三、实验内容(所修改函数代码,功能以及重要代码的解释):
主要操作内容:位操作函数; 补码运算函数; 浮点数表示函数
/*
* lsbZero - set 0 to the least significant bit of x
* Example: lsbZero(0x87654321) = 0x87654320
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 5
* Rating: 1
*/
/*
功能:将将整形x最后一位置零
*/
int lsbZero(int x) { //right
x >>= 1;
x <<= 1;
return x;
}
/*
* byteNot - bit-inversion to byte n from word x
* Bytes numbered from 0 (LSB) to 3 (MSB)
* Examples: getByteNot(0x12345678,1) = 0x1234A978
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 6
* Rating: 2
*/
/*
功能:将指定第n个(这里的顺序从后面数起)字节(8位)与1异或*/
int byteNot(int x, int n) { //right
int y = 0xff;//先预定一个8位的11111111
n <<= 3;//将n*8,为了后续字节的移动
y <<= n;//将这8个1移动到n所指的字节
x = x^y;
return x;
}
/*
* byteXor - compare the nth byte of x and y, if it is same, return 0, if not, return 1
* example: byteXor(0x12345678, 0x87654321, 1) = 1
* byteXor(0x12345678, 0x87344321, 2) = 0
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 20
* Rating: 2
*/
/*
判断x与y第n个字节是否相同
*/
int byteXor(int x, int y, int n) { //right
n <<= 3;
x >>= n;
y >>= n;
x = x&(0xff);
y = y&(0xff);
return !!(x^y);//这里的两个!!是为了让(x^y)的结果为0或1,而不是一个具体的数,例如:!!
8 = 1
}
/*
* logicalAnd - x && y
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 20
* Rating: 3
*/
/*
实现逻辑与
*/
int logicalAnd(int x, int y) { //right
x = !x|!y;//只要x和y中有一个0,x就是1
return !x;//为了符合要求取反
}
/*
* logicalOr - x || y
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 20
* Rating: 3
*/
/*
实现逻辑或
*/
int logicalOr(int x, int y) { //right
x = x | y;
return !!x;//让x规范输出
}
/*
* rotateLeft - Rotate x to the left by n
* Can assume that 0 <= n <= 31
* Examples: rotateLeft(0x87654321,4) = 0x76543218
* Legal ops: ~ & ^ | + << >> !
* Max ops: 25
* Rating: 3
*/
/*
将x的前n位移动到后面去
*/
int rotateLeft(int x, int n) { //right
int toZero = ~(((1<<31)>>31)< } /* * parityCheck - returns 1 if x contains an odd number of 1's * Examples: parityCheck(5) = 0, parityCheck(7) = 1 * Legal ops: ! ~ & ^ | + << >> * Max ops: 20 * Rating: 4 */ /* 判断这个2进制数是否为奇数个1 */