1、实验二数据表示实验深 圳 大 学 实 验 报 告 课 程 名 称: 计算机系统(2) 实验项目名称: 数据表示实验 学 院: 专 业: 指 导 教 师: 罗秋明 报告人: 学号: 班级: 实 验 时 间: 2017年3月31日 实验报告提交时间: 2017年4月13日 教务处制一、 实验目标:1.了解各种数据类型在计算机中的表示方法2.掌握C语言数据类型的位级表示及操作二、实验环境:1.计算机(Intel CPU)2.Ubuntu Linux操作系统三、实验容与步骤1、根据bits.c中的要求补全以下的函数:int bitXor(int x, int y);int tmin(void);int
2、 isTmax(int x);nt allOddBits(int x);int negate(int x);int isAsciiDigit(int x);int conditional(int x, int y, int z);int isLessOrEqual(int x, int y);int logicalNeg(int x);int howManyBits(int x);unsigned float_twice(unsigned uf);unsigned float_i2f(int x);int float_f2i(unsigned uf);2、在Linux下测试以上函数是否正确,指
3、令如下:*编译:./dlc bits.c*测试:make btest./btest四、实验结果1. int bitXor(int x, int y);由离散数学逻辑命题逻辑可得,异或如下:2. int tmin(void);最小值为0x8000 0000,由1左移31即可得到:3.int isTmax(int x);最大值为0x7fff ffff,加一会变为0x10000000,而此数加上本身后会变为0,本身加本身为0的数只有0和0x1000 0000,故而再将0xffffffff排除即可4. int allOddBits(int x);只有所有奇数位为1的数(二进制),与0x5555 555
4、5进行&运算才会得到0,故而需要得到0x5555 5555即可,将0x5分别左移4、8、16、24得到4个数,然后将这四个数和0x5相加即可得到0x5555 55555.int negate(int x);取反加1即可6. int isAsciiDigit(int x);x需要=0且=0,然后p符号位(p31)&1为0则返回1,符号位1则返回0;B、 异号时,只要x=0,就要返回0,否则返回1,由(x31)&1能达到该效果;C、 c=a+b可作为x,y同号异号的判断。9. int logicalNeg(int x);令y=x+1,考虑x与y的符号位:A. 当x为0时,两者符号位都为0;B. 当
5、x=0x8000 0000时,两者符号位都为1;C. 否则,两者符号位为01或10;D. 根据离散数学的真值表得出(x)&(y).10. int howManyBits(int x);11. unsigned float_twice(unsigned uf);12. unsigned float_i2f(int x);A.用(二进制)科学计数法表示int型数时,尾数位数23时,找到位数最末一位记作xi,然后对尾数的舍去分3种情况考虑,初始化c=0:a) 当xi-1=1且xi-2、xi-3x0都为0(即要偶端舍入情况),且xi=1,令c=1(此处frac若是全为1,则会导致frac+c超出围,这
6、是bug,当还是通过了);b) 当xi-1=1且xi-2、xi-3x0不都为0,令c=1(与a存在同样的bug);c) 除a、b的情况,c=0;C.其他特殊情况再考虑一下就好了;13. int float_f2i(unsigned uf);exp为0,x=(-1)s*0.frac*2(-126);否则x=(-1)s*1.frac*2(exp-127)分情况考虑:A.根据float转为int是向0舍入的情况,当exp=0或者exp127(由exp-12723)-127)=0,根据x=(-1)s*1.frac*(exp-127),a) exp_sign=0,x=1.x22x21x0-x=1;b)
7、exp_sign=1,x=1x22.x21x0-x=1x22;c) exp_sign=2,x=1x22x21.x20x0-x=1x22x21;d) exp_sign=23,x=1x22x21x20x0-x=1x22x21x0e) exp_sign=30,x=1x22x21x20x0-x=1x22x21x000(共31位)f) exp_sign=32,x=1x22x21x20x0-x=1x22x21x000(共32位),此时,因为int为有符号,只有0x0000 00000能被表示出来,其他都是NAN;C.当exp_sign=(exp23)-127)=33,NAN最终截图:五、实验总结与体会此次实验主要考查的是对数据的处理,对此需要掌握数据在机器中的表示,运用合理的位运算来实现相应的功能。通过此次实验,我更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。尤其是加深对数据二进制编码表示的了解。通过使用有限类型和数量的运算操作实现一组给定功能的函数来提高了我对数据表示方面的C语言编程能力。指导教师批阅意见:成绩评定: 指导教师签字: 罗秋明 2017年 4月10日备注:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2