


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LAB1 实验报告语法检查: 正确性检查:1. bitAnd 源代码:return ( x| y );思路: 可以直接运用摩尔定律,写出与的等价形式。2. getByte 源代码:return ( x>>( n<<3)&0xff;思路:向右移动3n位,再用B按位与,截取出所需要的字节3. logicalShift 源代码:int logic=(1<<31)>> n)<<1);return logic&( x>>n);思路:设置一个变量 logic ,并通过算数移位将其前 n 为设置成 0,后面 32-n 位
2、设置为 1。利用这个变量按位与移位后的x 即可。4. bitCount 源代码:int bitCount( int x) 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<
3、<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;
4、return result; 思路: 主要还是使用二分法,通过以为设置五个字符串: 0101 0101 0101 0101 0101 0101 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
5、 源代码: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 !( xA( x<<shift)»shift);思路: shift=32-n 。即先左移 32-n 位,在右移 32-n 位,即保存最后 n 位数。在与 x 异或,假设两者相同表示 x 可被表示为
6、一个 n 位整数,!0 为 1。8. divpwr2 源代码:int sign= x>>31;int one=(1<< n)+(0);int two=sign&one; return ( x+two)>>n;思路:首先取得符号位,然后设置one=2An-1,如果x是正数,那么two为0,即不用加, 直接移位如果 x 为负数,加上偏置量之后在移位。9. negate源代码:return x+1;思路:即求负数,原数字按位取反再加一即可。10. isPositive 源代码:return !( x>>31)|(! x);思路: 这个看符号位就
7、行了,通过移位把符号位提取出来。11. isLessOrEqual源代码:int signx= x>>31;int signy= y>>31;int signSame=( x+(y)>>31)&(!(signxSigny);int signDiffer=signx&(!signy);return signDiffer|signSame;思路:首先获得两个符号位, 然后分别就考虑负号位相同和不同的情况, 当负号位相同, 那么利用减法, 获取差的符号位; 如果符号位不同, 且 x 为负, y 为正,那么也成立。 综合负号相同和不同的情况,可以得到
8、最终结果。12. ilog2源代码:int ilog2( int x) int result=0;result=result+(!( result=result+(!( result=result+(!( result=result+(!(result=(!( x>>16)<<4;x>>(result+8)<<3); x>>(result+4)<<2); x>>(result+2)<<1); x>>(result+1);result=result+(!result)+(0)+(!(1Ax
9、);return result;思路:先右移 16位后假设大于 0 即得到有效数字, 否那么得到 0,判断最高位是否为 0,假设 不为 0,那么包含 2的 16次方。即得到最高位的 log 数,同理其他。13. float_neg源代码:unsigned float_neg( unsigned uf ) unsigned result;unsigned tmp;tmp=uf &(0x7fffffff);result= uf A0x;if (tmp>0x7f800000)result= uf;return result;思路:将该数字的最高位进行取反。然后分类讨论,比拟最高位为零时
10、,是否大于0 0000 0000 0000 0000 0000。即阶为最大是,此时,为NaN所以这个时候返回参数就可以啦。14. float_i2f源代码:unsigned float_i2f( int x) unsigned shiftleft=0;unsigned aftershift,tmp,flag;unsigned absx= x;unsigned sign=0;if (0=x)return 0;if (x<0)sign=0x;absx=- x;aftershift=absx;while (1)tmp=aftershift;aftershift<<=1;shiftl
11、eft+;if (tmp&0x)break ;if (aftershift & 0x01ff)>0x0100)flag=1;else if (aftershift&0x03ff)=0x0300)flag=1;elseflag=0;return sign + (aftershift>>9)+(159-shiftleft)<<23)+flag;思路:Int 型整数在转化为 float 型数的时候需要注意的是负数的表示, 在 int 型中负 数使用补码的形式表示, 而 float 直接表示, 所以先要对负数进行转化。 然后进 行循环,每移位一次阶码记录一次。最后把得到的三局部综合起来即可。15. float_twice 源代码: unsigned float_twice( unsigned uf) unsigned f= uf;if (f & 0x7f800000)=0) f=(f&am
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 5.1透镜 说课稿2025年初中 人教版物理八年级上册
- 学校结核病筛查对早期发现结核病的作用
- 《商业插画创意与表现》课件-【2】商业插画的发展历程
- 《国际市场营销》课件-第7章 国际市场价格策略
- 瑜伽馆改造粉刷施工合同
- 内部培训计划和实施情况统计表
- 银行行业互联网金融创新方案
- 企业中层管理人员培训方案
- 农业防治病虫害的方法有哪些
- 三农养殖业技术手册
- 预防接种门诊验收表4-副本
- 2024年交管12123学法减分考试题库及完整答案(典优)
- 数智时代的AI人才粮仓模型解读白皮书(2024版)
- (2024年)高中化学校本课程教材《绿色化学》
- 中医-血家药方四物汤
- 2024年北师大版八年级下册数学第二章综合检测试卷及答案
- 2024年电厂讲解直流系统PPT通用课件
- 企业国防动员教育培训方案
- 必修一第三单元 单元挑战 探究密码安全问题课件
- 高中美术中的艺术治疗与心理健康
- 体育课电子教案模板
评论
0/150
提交评论