中国海洋大学计算机基础实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)<>(32+(~n+1)))&toZero) + (x<

}

/*

* 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

*/

相关文档
最新文档