华中科技大学计算机系统基础实验报告.docx
- 文档编号:1259251
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:32
- 大小:1.60MB
华中科技大学计算机系统基础实验报告.docx
《华中科技大学计算机系统基础实验报告.docx》由会员分享,可在线阅读,更多相关《华中科技大学计算机系统基础实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
课程实验报告
课程名称:
计算机系统基础
专业班级:
学号:
姓名:
指导教师:
报告日期:
2016年5月24日
计算机科学与技术学院
目录
实验1:
2
实验2:
9
实验3:
22
实验总结 30
30
实验1:
数据表示
1.1实验概述
本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。
实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。
实验语言:
c;实验环境:
linux
1.2实验内容
需要完成bits.c中下列函数功能,具体分为三大类:
位操作、补码运算和浮点数操作。
1.3实验设计
源码如下:
/*
*lsbZero-set0totheleastsignificantbitofx
*Example:
lsbZero(0x87654321)=0x87654320
*Legalops:
!
~&^|+<<>>
*Maxops:
5
*Rating:
1
*/
intlsbZero(intx){
//x右移一位再左移一位实现把最低有效位置0
x=x>>1;
x=x<<1;
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=n<<3;
y=y< x=(x^y); returnx; } /* *byteXor-comparethenthbyteofxandy,ifitissame,return0,ifnot,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和1 n=n<<3; x=x>>n; y=y>>n; 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=~(((1<<31)>>31)< x=((x>>(32+(~n+1)))&z)+(x< returnx; } /* *parityCheck-returns1ifxcontainsanoddnumberof1's *Examples: parityCheck(5)=0,parityCheck(7)=1 *Legalops: ! ~&^|+<<>> *Maxops: 20 *Rating: 4 */ intparityCheck(intx){ //每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1 inty; y=x<<16; y=y^x; y=y^(y<<8); y=y^(y<<4); y=y^(y<<2); y=y^(y<<1); y=y>>31; 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=((x>>31)&0x1)^((x>>30)&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时还要+1 inty=(x<<1)+x; y=(y>>1)+(((y>>31)&1)&(((y<<31)>>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=(x>>31)&1; intn=(y>>31)&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+1 inty=x>>31; 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&(~(1<<31)); if(x>0x7f800000) { returnuf; } elsereturnx; } /* *float_f2i-Returnbit-levelequi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中科技大学 计算机系统 基础 实验 报告
