实验报告书
实验课堂表现 A( ) B( ) C( ) 实验报告成绩 实验总成绩
实验名称: 计算机组成原理 实验 专业班级: 11503010232 学 号: 11503010232
姓 名: 王卫东 联系电话: 15023333724 指导老师: 刘小洋 实验时间: 2016-2017 (2)
计算机科学与工程学院 物联网工程系
重庆理工大学
实验1 位操作实验
1. 实验目的
本实验的目的是为更好地熟悉和掌握计算机中整数的二进制编码表示。在本实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。 2. 实验内容
1.学习Linux操作系统的基本操作方法,练习常用命令。 2.阅读README文件和bits.c中的代码及注释,然后根据下述实验要求完成bits.c中的各函数代码。
3. 实验要求
实验中实现的函数代码必须满足下述基本条件(更多具体要求见函数的注释): ? 只能使用顺序程序结构(不得使用循环或条件分支控制程序结构,例如if, do, while, for, switch等)。
? 仅能使用有限类型和数量的C语言算术和逻辑操作,例如如下的操作符,但注意每个题目可能有不同的可用操作符列表,详见具体函数说明。
! ~ & ^ | + <<>>
? 不得使用超过8位表示的常量(即其值必须位于[0,255]中)。 ? 不得使用任何形式的强制类型转换。
? 不得使用除整型外的任何其它数据类型,如数组、结构、联合等。 ? 不得定义和使用宏。
? 不得定义除已给定的框架函数外的其他函数,不得调用任何函数。 ? 特定于浮点数操作函数的额外限制条件:
o 可以使用循环和条件控制; o 可以使用整型和无符号整型常量及变量(取值不受[0,255]限制); o 不使用任何浮点数据类型、操作及常量。
上述实验要求的主要目的是使得你必须从二进制位的角度考虑数据,进而更清楚地理解数据的二进制表示。 4. 实验结果
2
重庆理工大学
int bitAnd(int x, int y) {
return ~(~x | ~y); }
int bitXor(int x, int y) {
return ~(~(x&~y)&~(~x&y)); }
int thirdBits(void) { return 2; }
int getByte(int x, int n) { return 2; }
int logicalShift(int x, int n) {
return (x>>n)&~(((1<<31)>>n)<<1); }
int bang(int x) {
return (~((x|(~x+1))>>31))&0x01; }
int conditional(int x, int y, int z) {
return (((!!x<<31)>>31)&y)+((((!x)<<31)>>31)&z); }
5. 实验收获和体会
在本次试验中,更好地熟悉和掌握了计算机中整数的二进制编码表示。学会了一些运算操作用有限类型和数量来实现给定的功能函数,加深了对二进制编码表示的理解,对ubuntu的操作更加熟练。
6. 实验中碰到的问题和解决的方法
很多运算符分不清,就去查资料做标记。
3