深入理解计算机系统LAB1实验报告.doc

深入理解计算机系统LAB1实验报告.doc

ID:55616373

大小:96.50 KB

页数:7页

时间:2020-05-19

深入理解计算机系统LAB1实验报告.doc_第1页
深入理解计算机系统LAB1实验报告.doc_第2页
深入理解计算机系统LAB1实验报告.doc_第3页
深入理解计算机系统LAB1实验报告.doc_第4页
深入理解计算机系统LAB1实验报告.doc_第5页
资源描述:

《深入理解计算机系统LAB1实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、LAB1实验报告语法检查:正确性检查:1.bitAnd源代码:return~(~x

2、~y);思路:可以直接运用摩尔定律,写出与的等价形式。2.getByte源代码:return(x>>(n<<3))&0xff;思路:向右移动3n位,再用11111111B按位与,截取出所需要的字节3.logicalShift源代码:intlogic=~(((1<<31)>>n)<<1);returnlogic&(x>>n);思路:设置一个变量logic,并通过算数移位将其前n为设置成0,后面32-n位设置为1。利用这个变量按位与移位后的x即可。4.bitCount源代码:

3、intbitCount(intx){intresult;inthalf_one=(0x55)

4、(0x55<<8);intone=(half_one)

5、(half_one<<16);inthalf_two=(0x33)

6、(0x33<<8);inttwo=(half_two)

7、(half_two<<16);inthalf_three=(0x0f)

8、(0x0f<<8);intthree=(half_three)

9、(half_three<<16);intfour=(0xff)

10、(0xff<<16);intfive=(0xff)

11、(0xff<<8);result=

12、(x&one)+((x>>1)&one);result=(result&two)+((result>>2)&two);result=(result+(result>>4))&three;result=(result+(result>>8))&four;result=(result+(result>>16))&five;returnresult;}思路:主要还是使用二分法,通过以为设置五个字符串:010101010101010101010101010101010011001100110011001100110011001100001111000011110

13、0001111000011110000000011111111000000001111111100000000000000001111111111111111分别通过按位与统计1的个数,并将个数记录在下一个字符串1出现的位置。最后可以得到1的个数。1.bang源代码:return(~((x

14、(~x+1))>>31))&1;思路:X和-X的机器数按位与,当X不为0是,其符号位一定为0。然后再利用移位得到其符号位即可。2.tmin源代码:return1<<31;思路:即得到最小负数0x80000000。可以通过移位得到。1.fitsBit源代码:intshi

15、ft=~n+33;return!(x^((x<>shift));思路:shift=32-n。即先左移32-n位,在右移32-n位,即保留最后n位数。在与x异或,若两者相同表示x可被表示为一个n位整数,!0为1。2.divpwr2源代码:intsign=x>>31;intone=(1<>n;思路:首先取得符号位,然后设置one=2^n-1,如果x是正数,则two为0,即不用加,直接移位如果x为负数,加上偏置量之后在移位。3.negate源代码:return~x+1

16、;思路:即求负数,原数字按位取反再加一即可。4.isPositive源代码:return!((x>>31)

17、(!x));思路:这个看符号位就行了,通过移位把符号位提取出来。1.isLessOrEqual源代码:intsignx=x>>31;intsigny=y>>31;intsignSame=((x+(~y))>>31)&(!(signx^signy));intsignDiffer=signx&(!signy);returnsignDiffer

18、signSame;思路:首先获得两个符号位,然后分别就考虑负号位相同和不同的情况,当负号位相同,则利用减法,获

19、取差的符号位;如果符号位不同,且x为负,y为正,则也成立。综合负号相同和不同的情况,可以得到最终结果。2.ilog2源代码:intilog2(intx){intresult=0;result=(!!(x>>16))<<4;result=result+((!!(x>>(result+8)))<<3);result=result+((!!(x>>(result+4)))<<2);result=result+((!!(x>>(result+2)))<<1);result=result+(!!(x>>(result+1)));result=result+(!!r

20、esult)+(~0)+(!(1^x));returnresult;}思路:先右

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。