实验二-数据表示实验

上传人:鲁** 文档编号:495178687 上传时间:2023-03-13 格式:DOCX 页数:16 大小:446.52KB
返回 下载 相关 举报
实验二-数据表示实验_第1页
第1页 / 共16页
实验二-数据表示实验_第2页
第2页 / 共16页
实验二-数据表示实验_第3页
第3页 / 共16页
实验二-数据表示实验_第4页
第4页 / 共16页
实验二-数据表示实验_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《实验二-数据表示实验》由会员分享,可在线阅读,更多相关《实验二-数据表示实验(16页珍藏版)》请在金锄头文库上搜索。

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 isTmax(int x);nt allOddBits(int x);in

2、t 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下测试以上函数是否正确,指令如下:*编译:./dlc bits.c*测试:make btest./bt

3、est四、实验结果1. int bitXor(int x, int y);由离散数学逻辑命题逻辑可得,异或如下:rootubuntu: /home/yangUbIn_2014040329/Dektop/datalab-hBndint bitXor(tnt x , int y) ( returnx&y);2. int tmin(void);最小值为0x8000 0000,由1左移31即可得到:root)ubuntu: /hame/yanglibtn_2014040329/Desktop/datalab-hand* tnln - return nintnum two1s conplenent In

4、teger* Legal ops: ! - & A | 十 * Max opsi 4* Rating: 1tnt tntnCvoid return3. int isTmax(int x);本身加本身为0的数只有0和0x1000 0000,故而再将0xffffffff排除即可complementmaximunRatingt LsTnax(int x) return !(xA(x+l)&IsTnax - returns 1 and 0 otherwise Legal ops: ! - &最大值为0x7fff ffff,加一会变为0x10000000,而此数加上本身后会变为0 ,4. int all

5、OddBits(int x);只有所有奇数位为1的数(二进制),与0x5555 5555进行&运算才会得到0,故 而需要得到0x5555 5555即可,将0x5分别左移4、8、16、24得到4个数,然 后将这四个数和0x5相加即可得到0x5555 55555.int negate(int x);取反加1即可Ratingt regatefint returnnegate - return -x Example: negatef1) Legal ops6. int isAsciiDigit(int x);x需要= 0且= 9,将x与临界点作差,然后判断符号位的为0还是1即rootubuntu: /

6、home/yanglibin_2014040329/Desktop/datalab-hand与国母* IsAscliDigit - return 1 if 9x30 c= x * Max ops: 15* Rating: 3*/int isAsciiDigitfint x) return ! (x+48+l)31)&! ! (X4-58+l)31);7. int conditional(int x, int y, int z);首先使用t=!x,当x为0时返回1,当x不为0时,返回0根据题意得到(_&y)|( _ &z),首先空1,当x不为0,即t=0时,需要t转换为0xffffffff(-1

7、),当t=1 时,需要将t转换为0x0(0),将t-1即可,得到空1为“!x+1+1”,同理空2 为“!x+1”8. int isLessOrEqual(int x, int y);直接用y-x可能会超出int的表示围,故而:A、在x与y同号的情况下转换为p=y-x=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. 当x=0x800

8、0 0000时,两者符号位都为1 ;C. 否则,两者符号位为01或10;D. 根据离散数学的真值表得出(x)&(y).10. int howManyBits(int x);Enrootubuntu: /home/yangUbln_2014040329/Desktop/datalab-hand howNanyBtts - return the minimum number of bits required to two1s complement Examples: howManyBits(12) = 5 howManyBits(298) = 10 howManyBits(-5) = 4 howM

9、anyBits(O) = 1 howManyBits(-1) = 1 howManyBits(0x80000000) = 32Legal ops: ! & A | + Max ops: 90Rating: 4howManyBits(int x) int tnt int ints,si,s2,s4,s8,s!6;tl=( ( ! X)31)31;t2=(op=xA( x31);S16= ! ! (op16)c4;op=opsl6;s8=( ! ! (op8)4)op=ops4;s2=( ! ! (op2)c&Ox7f:8O&O0O)=O) return uf;elseelse(exp=exp+0

10、x00809090;if(exp)&0x7f800090)frac=9:P=0)if)=&) frac=f raced;elsefrac=fra匚result are passed they are to be interpreted as the bit singte-precision floating point value When argument is NaN, return argument Legal ops: Any tnteger/unsigned operations tncL12. unsigned float_i2f(int x);A. 用(二进制)科学计数法表示in

11、t型数时,尾数位数=23,例如0x00008001,此时将0x8001左移 24-16=8 位得到 frac,而 exp 则 127+16-1 ;B. 当尾数位数23时,找到位数最末一位记作xi,然后对尾数的舍去分3种情况考虑,初始化c=0 :a)当xi-1=1且xi-2、xi-3x0都为0 (即要偶端舍入情况),且xi=1,令c=1(此处frac若是全为1,则会导致frac+c超出围,这是bug,当还是通过了);b)当xi-1=1且xi-2、xi-3x0不都为0,令c=1 (与a存在同样的bug);c)除a、b的情况,c=0 ;C. 其他特殊情况再考虑一下就好了;rootijbunitii;

12、 /home/yanglibinH20140403 29/Desktop/datalab-hand国 $Thu Apr m */GJ unsigned float_i2f(int x) unsigned shiftLeftOjunsigned afterShift, tEp, flag;unsigned 胡sx=x;unsigned/special caseif (x=。) return 0;/if x 0, sign =abs_K = -x、Jif (x0) _sign=Dx89OOOG09;absxx;冒 )afterShtft=at)sX;/count shifand after_shiftwhile (1) EE国tnp=aftersritft;afterShift0xoioo) aflag=l;=else tf CCaftershtfr a oxo3ff)0x0309)flag=l;aelseflag=D;return sign + (attershttt9) + (159- shtttLeft)23) + flag;13. int float_f2i(unsigned uf);exp 为 0,x=(-1)s*0.frac*2”(-126);否则 x=(-1)s*1.frac*2”(exp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号