深入理解计算机系统(第二版) 家庭作业答案.doc

深入理解计算机系统(第二版) 家庭作业答案.doc

ID:56731995

大小:748.50 KB

页数:95页

时间:2020-07-06

深入理解计算机系统(第二版) 家庭作业答案.doc_第1页
深入理解计算机系统(第二版) 家庭作业答案.doc_第2页
深入理解计算机系统(第二版) 家庭作业答案.doc_第3页
深入理解计算机系统(第二版) 家庭作业答案.doc_第4页
深入理解计算机系统(第二版) 家庭作业答案.doc_第5页
资源描述:

《深入理解计算机系统(第二版) 家庭作业答案.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、深入理解计算机系统(第二版)家庭作业第二章深入理解计算机系统二进制2.55-2.57 略2.58int is_little_endian(){    int a= 1;    return *((char*)&a);}2.59(x&0xFF)

2、(y&~0xFF)2.60unsigned replace_byte(unsigned x, unsigned char b, int i){    return (x & ~(0xFF<<(i<<3))) 

3、 (b << (i<<3));}2.61A.!~xB.!xC.!~(x>>((sizeof(int)

4、-1)<<3))D.!(x&0xFF)注意,英文版中C是最低字节,D是最高字节。中文版恰好反过来了。这里是按中文版来做的。2.62这里我感觉应该是英文版对的,int_shifts_are_arithmetic()int int_shifts_are_arithmetic(){    int x= -1;    return (x>>1) == -1;}2.63对于sra,主要的工作是将xrsl的第w-k-1位扩展到前面的高位。这个可以利用取反加1来实现,不过这里的加1是加1<<(w-k-1)。如果x的第w-k-1位为0,取反加1后,前面位全为0,如

5、果为1,取反加1后就全是1。最后再使用相应的掩码得到结果。对于srl,注意工作就是将前面的高位清0,即xsra&(1<<(w-k)-1)。额外注意k==0时,不能使用1<<(w-k),于是改用2<<(w-k-1)。 int sra(int x, int k){    int xsrl= (unsigned) x >> k;    int w= sizeof(int)<<3;    unsignedz= 1 << (w-k-1);    unsignedmask=z - 1;    unsignedright=mask & xsrl;    unsi

6、gnedleft= ~mask & (~(z&xsrl) + z);    return left 

7、 right;}int srl(unsignedx, int k){    int xsra= (int) x >> k;    int w= sizeof(int)*8;    unsignedz= 2 << (w-k-1);    return (z - 1) & xsra;}2.64int any_even_one(unsignedx){    return !!(x & (0x55555555));}2.65int even_ones(un

8、signedx){    x ^= (x>> 16);    x ^= (x>> 8);    x ^= (x>> 4);    x ^= (x>> 2);    x ^= (x>> 1);    return !(x&1);} x的每个位进行异或,如果为0就说明是偶数个1,如果为1就是奇数个1。那么可以想到折半缩小规模。最后一句也可以是return(x^1)&12.66根据提示想到利用或运算,将最高位的1或到比它低的每一位上,忽然想如果x就是10000000..该如何让每一位都为1。于是便想到了二进扩展。先是x右移1位再和原x进行或,变成1100

9、000...,再让结果右移2位和原结果或,变成11110000...,最后到16位,变成11111111...。int leftmost_one(unsignedx){    x 

10、= (x >> 1);    x 

11、= (x >> 2);    x 

12、= (x >> 4);    x 

13、= (x >> 8);    x 

14、= (x >> 16);    return x^(x>>1);}2.67A.32位机器上没有定义移位32次。B.beyond_msb变为2<<31。C.定义a=1<<15;a<<=15;set_msb=a<<1;beyond_

15、msb=a<<2;2.68感觉中文版有点问题,注释和函数有点对应不上,于是用英文版的了。个人猜想应该是让x的最低n位变1。int lower_one_mask(int n){    return (2<<(n-1)) - 1;}2.69unsigned rotate_right(unsignedx, int n){    int w= sizeof(unsigned)*8;    return (x>>n) 

16、 (x<<(w-n-1)<<1);}2.70这一题是看x的值是否在-2^(n-1)到2^(n-1)-1之间。如果x满足这个条件,则其第n-1

17、位就是符号位。如果该位为0,则前面的w-n位均为0,如果该位为1,则前面的w-n位均为1。所以本质是判断,x的高w-n+1

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

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

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