您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文档 > 华中科技大学计算机系统基础实验报告
-------------精选文档-----------------可编辑课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:2016年5月24日-------------精选文档-----------------可编辑计算机科学与技术学院-------------精选文档-----------------可编辑目录实验1:........................................................................................................3实验2:......................................................................................................13实验3:......................................................................................................28实验总结.....................................................................................................37-------------精选文档-----------------可编辑实验1:数据表示1.1实验概述本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。实验语言:c;实验环境:linux1.2实验内容需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。1.3实验设计源码如下:/**lsbZero-set0totheleastsignificantbitofx*Example:lsbZero(0x87654321)=0x87654320*Legalops:!~&^|+*Maxops:5*Rating:1*/intlsbZero(intx){//x右移一位再左移一位实现把最低有效位置0-------------精选文档-----------------可编辑x=x1;x=x1;returnx;}/**byteNot-bit-inversiontobytenfromwordx*Bytesnumberedfrom0(LSB)to3(MSB)*Examples:getByteNot(0x12345678,1)=0x1234A978*Legalops:!~&^|+*Maxops:6*Rating:2*/intbyteNot(intx,intn){//x第n个字节每位都和1异或实现取反inty=0xff;n=n3;y=yn;x=(x^y);returnx;}/**byteXor-comparethenthbyteofxandy,ifitissame,return0,if-------------精选文档-----------------可编辑not,return1*example:byteXor(0x12345678,0x87654321,1)=1*byteXor(0x12345678,0x87344321,2)=0*Legalops:!~&^|+*Maxops:20*Rating:2*/intbyteXor(intx,inty,intn){//把x和y的第n个字节取出来异或,再转换为逻辑的0和1n=n3;x=xn;y=yn;x=x&(0xff);y=y&(0xff);return!!(x^y);}/**logicalAnd-x&&y*Legalops:!~&^|+*Maxops:20*Rating:3-------------精选文档-----------------可编辑*/intlogicalAnd(intx,inty){//把x和y分别转化为逻辑的0和1,再相与x=(!(!x))&(!(!y));returnx;}/**logicalOr-x||y*Legalops:!~&^|+*Maxops:20*Rating:3*/intlogicalOr(intx,inty){//把x和y分别转化为逻辑的0和1,再相或x=(!(!x))|(!(!y));returnx;}/**rotateLeft-Rotatextotheleftbyn*Canassumethat0=n=31*Examples:rotateLeft(0x87654321,4)=0x76543218*Legalops:~&^|+!-------------精选文档-----------------可编辑*Maxops:25*Rating:3*/introtateLeft(intx,intn){//先构造低n位为1,高(32-n)位为0的数z,x左移n位后的数加上x右移(32-n)位的数&z即可intz;z=~(((131)31)n);x=((x(32+(~n+1)))&z)+(xn);returnx;}/**parityCheck-returns1ifxcontainsanoddnumberof1's*Examples:parityCheck(5)=0,parityCheck(7)=1*Legalops:!~&^|+*Maxops:20*Rating:4*/intparityCheck(intx){//每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1inty;-------------精选文档-----------------可编辑y=x16;y=y^x;y=y^(y8);y=y^(y4);y=y^(y2);y=y^(y1);y=y31;return!(!y);}/**mul2OK-Determineifcancompute2*xwithoutoverflow*Examples:mul2OK(0x30000000)=1*mul2OK(0x40000000)=0**Legalops:~&^|+*Maxops:20*Rating:2*/intmul2OK(intx){//把x第31位和30位分别和1做按位与,再异或,再和1异或intm;m=((x31)&0x1)^((x30)&0x1);-------------精选文档-----------------可编辑returnm^0x1;}/**mult3div2-multipliesby3/2roundingtoward0,*ShouldexactlyduplicateeffectofCexpression(x*3/2),*includingoverflowbehavior.*Examples:mult3div2(11)=16*mult3div2(-9)=-13*mult3div2(1073741824)=-536870912(overflow)*Legalops:!~&^|+*Maxops:12*Rating:2*/intmult3div2(intx){//左移一位再+x即x*3,右移一位的时候,当y的最高位和最低位都为0时还要+1inty=(x1)+x;y=(y1)+(((y31)&1)&(((y31)31)&1));returny;}/**subOK-Determineifcancomputex-ywithoutoverflow-------------精选文档-----------------可编辑*Example:subOK(0x80000000,0x80000000)=1,*subOK(0x80000000,0x70000000)=0,*Legalops:!~&^|+*Maxops:20*Rating:3*/intsubOK(intx,inty){//x的最高有效位和y的最高有效位不同且x和(x-y)的最高位不同才能判断溢出intm=(x31)&1;intn=(y31)&1;x=(m^n)&(m^(((x+(~y+1))31)&1));return(!x);}/**absVal-absolutevalueofx*Example:absVal(-1)=1.*Youmayassume-TMax=x=TMax*Legalops:!~&^|+*Maxops:10*Rating:4*/-------------精选文档-----------------可编辑intabsVal(intx){//x最高位为0时就是x,最高位为1时是~x+1inty=x31;x=(y&(~x+1))+((~y)&x);returnx;}/**float_abs-Returnbit-levelequivalentofabsolutevalueofffor*floatingpointargumentf.*Boththeargumentandresultarepassedasunsignedint's,but*theyaretobeinterpretedasthebit-levelrepresentationsof*single-precisionfloatingpointvalues.*WhenargumentisNaN,returnargument..*Legalops:Anyinteger/unsignedoperationsincl.||,&&.alsoif,while*Maxops:10*Rating:2*/unsignedfloat_abs(unsigneduf){intx=uf&(~(131));if(x0x7f800000){returnuf;-------------精选文档-----------------可编辑}elsereturnx;}/**float_f2i-Returnbit-levelequivalentofexpression(int)f*forfloatingpointargumentf.*Argumentispassedasunsignedint,but*itistobeinterpretedasthebit-levelrepresentationofa*single-precisionfloatingpointvalue.*Anythingoutofrange(includingNaNandinfinity)shouldreturn*0x80000000u.*Legalops:Anyinteger/unsignedoperationsincl.||,&&.alsoif,while*Maxops:30*Rating:4*/intfloat_f2i(unsigneduf){unsignednum=0x80000000;intx=(uf&0x007fffff)^0x00800000;intorder=0;order=(uf&0x7f800000)23;if(order158){returnnum;-------------精选文档-----------------可编辑}if(order127)return0;elseif(((uf31)&1)==1){if(order150){return~(x(order-150))+1;}elsereturn~(x(150-order))+1;}else{if(order150)returnx(order-150);elsereturnx(150-order);}}1.4实验过程编写源码,运行btest,得出实验结果。1.5实验
本文标题:华中科技大学计算机系统基础实验报告
链接地址:https://www.777doc.com/doc-6090960 .html