《深入理解计算机系统》第二章部分习题
来源:互联网 发布:天一混元青岛店淘宝 编辑:程序博客网 时间:2024/05/22 06:18
人生第一篇博文。
《深入理解计算机系统》第二章部分习题:
2.62 int_shifts_are_arithmetic() 对int类型数使用算术右移返回1,否则返回0;
显然,只需考虑负数即可(非负数算术右移与逻辑右移相同)。这里以-1为例,-1算术右移一位,所产生的二进制码代表的数值不变;而逻辑右移则会使最高位为0,变成(1<<31)-1,最大值。
int int_shifts_are_arithmetic(){ //printf("%x %x\n",((-1)>>1),-1); return ((-1)>>1)==-1;}
2.63 函数srl用算术右移实现逻辑右移,后面的代码不允许使用右移或者除法。
算术右移,若x为正数,则算术右移的结果等于逻辑右移的结果;若x为负数,则算术右移相较于逻辑右移会补上k个1。显然,x=a*2^(w-k)+b;x’=x>>k=(c)*2^(w-k)+a:若x>0,c=0;若x<0,c=(1<
unsigned srl(unsigned x,int k){ unsigned xsra=(int)x>>k; unsigned c=!!(x&(1<<31)); unsigned u=((c<<(sizeof(unsigned)*8-k))); return xsra+u;}
2.65 2.66都采用了二分的思想,具体的可以参考其他博客
2.75
若x和y是无符号数,其对应的二进制表达的补码为x’,y’;
x*y=(x’+x’(31)2^32)(y’+y’(31)*2^32)
=x’y’+x’*y’(31)*2^32+y’*x’(31)*2^32+x’(31)*y’(31)*2^64
所以两边除以2^32就可以得到所求部分
而x’*y’/2^32=signed_high_prod((int)x,(int)y);
unsigned unsigned_high_prod(unsigned x,unsigned y){ int yw=y>>31,xw=x>>31; return signed_high_prod(x,y)+yw*x+xw*y;}
这个题目做起来邮费是邮费闹==
有兴趣再做其余的题目
0 0
- 《深入理解计算机系统》第二章部分习题
- 《深入理解计算机系统》第二章习题2_66
- 深入理解计算机系统 第二章
- 深入理解计算机系统第二版课后习题2.65
- 深入理解计算机系统第二版课后习题2.66
- 深入理解计算机系统 习题 1
- 读书笔记:深入理解计算机系统 第二章
- 转深入理解计算机系统第二章答案。。
- 深入理解计算机系统--第二章(读书笔记)
- 《深入理解计算机系统》- 学习笔记 - 第二章
- 深入理解计算机系统--第二章杂记
- 深入理解计算机系统——第二章
- 深入理解计算机系统第二章学习笔记
- 深入理解计算机系统(第二版)
- 《深入理解计算机系统》(第二版)第二章练习题3
- 《深入理解计算机系统》(第二版)第二章练习题4
- 《深入理解计算机系统》(第二版)第二章练习题5
- 深入理解计算机系统(第二版) 家庭作业 第二章
- PHP设计模式系列(十七):桥接模式
- Markdown
- <模型汇总_4>神经翻译模型(NMT)新宠_Adversarial Neural Machine Translation_Adversarial-NMT
- cocos creator配置原生平台调试遇到的一些问题
- android中 异步消息处理机制及Handler
- 《深入理解计算机系统》第二章部分习题
- python 数组的del ,remove,pop区别
- java面试题——三大框架的核心:Java反射机制和Spring控制反转和依赖注入
- 复制安卓源码显示红色代码警告,Cannot resolve Symbol
- Docker pression denied
- 单行文字长度超过文本框width值导致换行问题
- zookeeper+dubbo+springMVC
- 浅谈forEach
- [BZOJ 1179][Apio2009]Atm:Tarjan+SPFA