深入理解计算机系统LAB1实验报告
更新时间:2023-11-02 01:45:01 阅读量: 综合文库 文档下载
LAB1实验报告
语法检查:
正确性检查:
1. bitAnd 源代码:
return ~(~x|~y);
思路:
可以直接运用摩尔定律,写出与的等价形式。 2. getByte 源代码:
return (x>>(n<<3))&0xff;
思路:
向右移动3n位,再用11111111B按位与,截取出所需要的字节 3. logicalShift 源代码:
int logic=~(((1<<31)>>n)<<1); return logic&(x>>n);
思路:
设置一个变量logic,并通过算数移位将其前n为设置成0,后面32-n位设置为1。利用这个变量按位与移位后的x即可。 4. bitCount 源代码:
int bitCount(intx) { int result;
int half_one=(0x55)|(0x55<<8); int one=(half_one)|(half_one<<16); int half_two=(0x33)|(0x33<<8); int two=(half_two)|(half_two<<16); int half_three=(0x0f)|(0x0f<<8);
int three=(half_three)|(half_three<<16); int four=(0xff)|(0xff<<16); int five=(0xff)|(0xff<<8);
result=(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; return result; }
思路:
主要还是使用二分法,通过以为设置五个字符串: 010101010101010101010101 0101 0101 0011 0011 0011 0011 0011 0011 0011 0011 0000 1111 0000 1111 0000 1111 0000 1111 0000 0000 1111 1111 0000 0000 1111 1111 0000 0000 0000 0000 1111 1111 1111 1111
分别通过按位与统计1的个数,并将个数记录在下一个字符串1出现的位置。最后可以得到1的个数。 5. bang 源代码:
return (~((x|(~x+1))>>31))&1;
思路:
X和-X的机器数按位与,当X不为0是,其符号位一定为0。然后再利用移位得到其符号位即可。 6. tmin 源代码:
return 1<<31;
思路:
即得到最小负数0x8000 0000。可以通过移位得到。
7. fitsBit 源代码:
int shift=~n+33;
return !(x^((x<
思路:
shift=32-n。即先左移32-n位,在右移32-n位,即保留最后n位数。在与x异或,若两者相同表示x可被表示为一个n位整数,!0为1。 8. divpwr2 源代码:
int sign=x>>31; int one=(1< return (x+two)>>n; 思路: 首先取得符号位,然后设置one=2^n-1,如果x是正数,则two为0,即不用加,直接移位如果x为负数,加上偏置量之后在移位。 9. negate 源代码: return ~x+1; 思路: 即求负数,原数字按位取反再加一即可。 10. isPositive 源代码: return !((x>>31)|(!x)); 思路: 这个看符号位就行了,通过移位把符号位提取出来。 11. isLessOrEqual 源代码: int signx=x>>31; int signy=y>>31; int signSame=((x+(~y))>>31)&(!(signx^signy)); int signDiffer=signx&(!signy); return signDiffer|signSame; 思路: 首先获得两个符号位,然后分别就考虑负号位相同和不同的情况,当负号位相同,则利用减法,获取差的符号位;如果符号位不同,且x为负,y为正,则也成立。综合负号相同和不同的情况,可以得到最终结果。 12. ilog2 源代码: int ilog2(intx) { int result=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+(!!result)+(~0)+(!(1^x)); return result; } 思路: 先右移16位后若大于0即得到有效数字,否则得到0,判断最高位是否为0,若不为0,则包含2的16次方。即得到最高位的log数,同理其他。 13. float_neg 源代码: unsigned float_neg(unsigneduf) { unsigned result; unsigned tmp; tmp=uf&(0x7fffffff); result=uf^0x80000000; if(tmp>0x7f800000) } result=uf; return result; 思路: 将该数字的最高位进行取反。然后分类讨论,比较最高位为零时,是否大于 0 11111111 0000 0000 0000 0000 0000。即阶为最大是,此时,为NaN,所以这个时候返回参数就可以啦。 14. float_i2f 源代码: unsigned float_i2f(intx) { unsigned shiftleft=0; unsigned aftershift,tmp,flag; unsigned absx=x; unsigned sign=0; if(0==x) } aftershift=absx; while(1){ } if((aftershift & 0x01ff)>0x0100) flag=1; flag=1; elseif((aftershift&0x03ff)==0x0300) else tmp=aftershift; aftershift<<=1; shiftleft++; if(tmp&0x80000000) break; return 0; sign=0x80000000; absx=-x; if(x<0){ flag=0; return sign + (aftershift>>9)+((159-shiftleft)<<23)+flag; } 思路: Int型整数在转化为float型数的时候需要注意的是负数的表示,在int型中负数使用补码的形式表示,而float直接表示,所以先要对负数进行转化。然后进行循环,每移位一次阶码记录一次。最后把得到的三部分综合起来即可。 15. float_twice 源代码: unsigned float_twice(unsigneduf) { unsigned f=uf; if((f & 0x7f800000)==0){ } elseif((f&0x7f800000)!=0x7f800000){ return f; } } f=f+0x00800000; f=((f&0x007fffff)<<1)|(0x80000000&f); 思路: 先进行判断,如果阶码全零,则需要对尾数进行移位操作,并令阶码加一,判定符号位。如果阶码不为零,则只需要领阶码加一即可。当阶码全为1,不操作直接输出。
正在阅读:
深入理解计算机系统LAB1实验报告11-02
纤维素及其在实际生活中的应用综述10-27
全民创业工作思路02-15
北京2017年房地产估价师《制度与政策》:房地产转让的条件考试题01-07
煲汤好材料10-11
程门立雪文献录(游良耀) - 图文01-27
数字图像处理第二版贾永红复习资料全03-11
低碳球墨铸铁中sx变质剂的 为分析07-21
摩围山高峰期游客处置预案06-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 深入
- 理解
- 实验
- 计算机
- 报告
- 系统
- LAB1
- “电脑女”最易得的9种疾病
- 案例分析: 大连华兴船行诉日本平成商社管辖权积极冲突案
- 2014年浙江省通用技术学业水平考试模拟卷及答案
- 音韵学试题A、B
- 城市生活垃圾分类的研究和建议毕业论文
- “去产能”背景下煤炭行业从业人数变化情况
- 苏教版小学三年级语文下册-期末总复习资料
- 七年级数学下学期 6.1《加权平均数》教案1 湘教版
- 达内嵌入式培训的主要课程
- 大学计算机基础-第5章 计算机网络技术及应用自测试题
- 实验一 空间数据库的创建与数据导入
- 福建信息技术选修4
- 材料力学实验指导书(低碳钢和铸铁的扭转实验)
- 滤波电感的设计
- 小学语文复习填空练习
- 比亚迪S6车483发动机维修手册概要
- 读巴金作品有感作文
- 医疗废物集中处置中心可研
- 作为一个新人,怎样学习嵌入式Linux
- 丙二醛MDA测定