文档介绍:
课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:2016年5月24日计算机科学与技术学院目录实验1: 2实验2: 9实验3: 22实验总结 30 实验1:数据表示1.1实验概述本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。实验语言:c;实验环境:linux1.2实验内容需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。1.3实验设计源码如下:/**lsbZero-set0totheleastsignificantbitofx*Example:lsbZero(0x)=0x*Legalops:!~&^|+<<>>*Maxops:5*Rating:1*/intlsbZero(intx){//x右移一位再左移一位实现把最低有效位置0x=x>>1;x=x<<1;returnx;}/**byteNot-bit-inversiontobytenfromwordx*Bytesnumberedfrom0(LSB)to3(MSB)*Examples:getByteNot(0x,1)=0x1234A978*Legalops:!~&^|+<<>>*Maxops:6*Rating:2*/intbyteNot(intx,intn){//x第n个字节每位都和1异或实现取反inty=0xff;n=n<<3;y=y<>*Maxops:20*Rating:2*/intbyteXor(intx,inty,intn){//把x和y的第n个字节取出来异或,再转换为逻辑的0和1n=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(0x,4)=0x*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)<>(32+(~n+1)))&z)+(x<>*Maxops:20*Rating:4*/intparityCheck(intx){//每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1inty;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-pute2*xwithoutoverflow*Examples:mul2OK(0x)=1*mul2OK(0x)=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,*Shoul
内容来自淘豆网www.taodocs.com转载请标明出处.