收藏 分享(赏)

计算机系实验报告(二).pdf

上传人:weiwoduzun 文档编号:3077960 上传时间:2018-10-02 格式:PDF 页数:13 大小:264.28KB
下载 相关 举报
计算机系实验报告(二).pdf_第1页
第1页 / 共13页
计算机系实验报告(二).pdf_第2页
第2页 / 共13页
计算机系实验报告(二).pdf_第3页
第3页 / 共13页
计算机系实验报告(二).pdf_第4页
第4页 / 共13页
计算机系实验报告(二).pdf_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、1课程实验报告课 程 名 称: 计算机组成与结构实验项目名称: datalab专 业 班 级: 通信 1301 班姓 名:学 号:指 导 教 师: 某神完 成 时 间: 2015 年 4 月 17 日计算机科学与工程系2实验题目:datalab实验目的:完善bit.c里的各个函数,实现其功能,并通过btest的测试。实验环境:个人电脑、linux发行版本。*实验内容及操作步骤:第一步:完善bits.c里的各个函数,代码如下:(1).bitAnd函数,要求如下:/* bitAnd - x(2).getByte函数,要求如下:/* getByte - Extract byte n from wor

2、d x* Bytes numbered from 0 (LSB) to 3 (MSB)* Examples: getByte(0x12345678,1) = 0x56* Legal ops: ! #另一种思路:/*int t;t=(1nt=(tn)* Max ops: 40* Rating: 4*/#思路:*计算32位二进制x中1的个数*如果依次检测x的每一位,ops会超出所给限操作符数;*类似,由于bitcount结果不会超过32,故可以利用一个32位二进制数将每次的检测位数设定为m(mi的0,8,16,24位是否为1;*利用val累加分别计算4个字节上1的个数,val的每个字节的值为对应x

3、每个字节上的1的个数;*最后将得到val四个字节的值相加,即x四个字节上1的个数的和,保留最低字节的信息,为最后结果。#代码:int bitCount(int x) int tmp=(0x011); /检测x的1,9,17,25位是否为1val+=tmp /.val+=tmpval+=tmpval+=tmpval+=tmpval+=tmp /检测x的7,15,23,31位是否为1val+=(val16); /将val的高16位加到低16位上val+=(val8); /再将val的高8位加到低8位上return val /保留val的最低byte信息 为最终结果#贴一下某神代码(如果实验可以用0

4、x0-0xff以外的数):*二分合并,log级别复杂度*5(5).bang函数,要求如下:/* bang - Compute !x without using !* Examples: bang(3) = 0, bang(0) = 1* Legal ops: (6).tmin函数,要求如下:/* tmin - return minimum twos complement integer* Legal ops: ! return (s(8).divpwr2函数,要求如下:/* divpwr2 - Compute x/(2n), for 0 * Max ops: 15* Rating: 2*/#思

5、路:*求x/(2n)*分x为负数和非负数两种情况:*当x为非负数时,直接将x右移n位即可;*当x为负数时,如果x移出的位中不全为零,则结果为右移n位后的结果加一。*负数情况证明如下(某神给出的证明):xn)+1*若x的后n位不全为0 则x+1与x的n+132位相同(从1开始编号)故有(x+1)n)+1=(x)n)+1=(xn)+1*若x的后n位全部为0 则x+1的n+132位与x+(1n)+1=(xn)+1)=xn得证。#代码:int divpwr2(int x, int n) int s=!(x31); /取x的符号位的bool值int t=(1n)+(!lowx)(9).negate函数,

6、要求如下:/* negate - return -x* Example: negate(1) = -1.* Legal ops: ! (10).isPositive函数,要求如下:/* isPositive - return 1 if x 0, return 0 otherwise* Example: isPositive(-1) = 0.* Legal ops: ! /s表示x的符号位22)1(2)12()1x(2 U )12()12( )x(2U)12()x(2 U 12)x(2 U )x(2 U 2)x(2 U 101010w 10ww 1010得证。 写成将由 wi iiwi iiwi

7、 iiw wi iiww wi iiww wi iiw xxxT xTT xTT xT8return s /返回x为正数满足的条件/*return !(x31)|(!x);*/(11).isLessOrEqual函数,要求如下:/* isLessOrEqual - if x * Max ops: 24* Rating: 3*/#思路:*判断x=0是否成立,转化成判断y-x的正负;*当x和y同号时,y-x不会发生溢出,判断y-x是否为非负数即可;*当x和y异号时,y-x可能会发生溢出,其结果一定和y的符号一致。#代码:int isLessOrEqual(int x, int y) int sx=

8、!(x31); /sx表示x的符号位int sy=!(y31); /sy表示y的符号位int z=y+(x+1); /z=y-xint s=!(z31); /s表示z的符号位return (!(sxsy) /返回上述思路中两种情况(12).ilog2函数,要求如下:/* ilog2 - return floor(log base 2 of x), where x 0* Example: ilog2(16) = 4* Legal ops: ! s=!(x16); /判断最高位是否在高16位上s1=s=s1; /x相应右移s=!(x8); /判断最高位是否在高8位上s2=s=s2; /x相应右移s

9、=!(x4); /.s3=s=s3;s=!(x2);s4=s=s4;s=!(x1);s5=s; /最后一位return s1+s2+s3+s4+s5;/累加得出结果(13).float_neg函数,要求如下:/* float_neg - Return bit-level equivalent of expression -f for* floating point argument f.* Both the argument and result are passed as unsigned ints, but* they are to be interpreted as the bit-le

10、vel representations of* single-precision floating point values.* When argument is NaN, return argument.* Legal ops: Any integer/unsigned operations incl. |, /初始化expint frac=0; /用来保存尾数11int delta; /保存精度int frac_mask=(1i)exp=i+127; /偏置指数e=E+Bias,Bias=127x=x8); /frac取尾数(取x的高23位)x=x /保留x的末8位,将处理的精度delta

11、=x128|(x=128)/处理精度,四舍五入frac+=delta; /加上精度if(frac23) /如果尾数溢出frac /取尾数的后23位exp+=1; /产生进位return s|(exp23) /取阶码int frac=ufif(exp0xff) /如果阶码部分不为255if(!exp) /阶码部分不为0frac=1; /将尾数左移一位即可else /如果阶码为0exp+; /将阶码加1if(exp=255) /所得阶码为255frac=0; /将尾数设置为0,表示无穷大 /省略else情况,即uf为NaNreturn s|(exp23)|frac; /整合结果并返回第二步:在Linux下测试函数是否正确,指令如下:*编译:./dlc bits.c*测试 make btest./btest*实验结果及分析:13如上图,测试后结果完全正确,说明思路和代码全部正确。*收获与体会:通过本实验,我对各种数据类型的在计算机中的表示方法有了更好的了解;用各种运算符在一定的操作数限定内实现了函数的功能,更加熟悉了各种运算符,锻炼了思维和代码能力。实验成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报