



VIP免費(fèi)下載
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)組成實(shí)驗(yàn)實(shí)驗(yàn)1:實(shí)驗(yàn)題目:dalalab-handout實(shí)驗(yàn)?zāi)康?根據(jù)bits.c中的規(guī)定補(bǔ)全其中的函數(shù),并根據(jù)README中的規(guī)定在linux環(huán)境下檢測(cè)函數(shù)是否符合規(guī)定。實(shí)驗(yàn)環(huán)境:Ubuntu”.04x86系統(tǒng)inttmp_mask1=(0x55)I(0x55<<8);intmask1=(tmp_mask1)(tmp_maskl?16);inttmp_mask2=(0x33)|(0x33<<8);intmask2=(tmp_mask2)|(tmp_mask2<<!6);inttmpmask3=(0x0f)|(0x0f<<8);intmask3=(tmp_mask3)|(tmp_mask3<<16);intmask4=(Oxff)|(0xff<<16);intmask5=(0xff)|(0xff<<8);resu1t=(x&mask1)+((x>>1)&maski);result=(result&mask2)+((result>>2)&mask2);resu1t=(result+(result?4))&mask3;result=(result+(result>>8))&mask4;result=(resu1t+(resu1t>>16))&mask5;returnresu1t;)本題采用二分法,先計(jì)算x每?jī)晌恢?的個(gè)數(shù),并用相應(yīng)的兩位來儲(chǔ)存這個(gè)個(gè)數(shù)。然后計(jì)算每四位1的個(gè)數(shù),再用相應(yīng)的四位進(jìn)行儲(chǔ)存。依次類推,最后整合得到16位中1的個(gè)數(shù),即為x中1的個(gè)數(shù)并輸出。intbang(intx){return(~((x(~x+l))>>31))&1;)(x|(~x+l)即當(dāng)X為0時(shí),結(jié)果為(00???0)2(31個(gè)0)。其余情況最首位均為1。因此右移31位后再取反只有x=0時(shí)最后一位為1。再&1取最后一位。因此當(dāng)x=0時(shí)得到1,其余情況得到0。inttmin(void){return1?31;}1<<31即(100…0)z(31個(gè)0)。其中1是符號(hào)位。即為負(fù)零,以表達(dá)最小的整數(shù)。intfitsBits(intx,intn){intshiftNumber=^n+33;return!(x((x<<shiftNumber)?shiftNumber));)shiftNumber=^n+33即為T-n+33=32—n,((x<<shiftNumber)?shiftNumber)即先左移32-n位,再右移32-n位,即保存最后n位數(shù)。在與x按位異或并邏輯取反,若兩者兩同即x可被表達(dá)為一個(gè)n位整數(shù),結(jié)果為!0,即返回為1。兩者不同則不可表達(dá)為n位整數(shù),結(jié)果為!(一個(gè)非零數(shù)),返回0。intdivpwr2(intx,intn){intsignx=x?31;intmask=(1<Xn)+(?0);intbias=signx&mask;return(x+bias)>>n;}signx=x>>31為取x的符號(hào)位,mask=(1?n)+(^0)即mask等于2nMbias=signx&mask即當(dāng)x為正數(shù),signx=0,bias為0,x為負(fù)數(shù),signx=ll,bias=masko(x+bias)>>n當(dāng)x為正數(shù)即x?n,得到結(jié)果符合規(guī)定。當(dāng)x為負(fù)數(shù)時(shí),需要加上偏置量2皿得到預(yù)期結(jié)果,因此加上signx,得到結(jié)果符合規(guī)定。intnegate(intx){return?x+1;)?x+1即-1-x+1=—X。得到結(jié)果對(duì)的。intisPositive(intx){return!((x>>31)|(!x));//return?(x>>31)&!!x)(x>>31)即取x的符號(hào)位,!x為邏輯取反,當(dāng)x=0時(shí)!x=l,其他情況均為0.(x?31)|(!x)即當(dāng)x=0時(shí)得到1,x為負(fù)數(shù)得到l,x為正數(shù)得到0。再進(jìn)行邏輯取反,即當(dāng)x為正數(shù)時(shí)返回1,x為0或負(fù)數(shù)時(shí)返回0ointisLessOrEqual(intx,inty){intsignx=x?31;〃判斷符號(hào)intsigny=y>>31;intsignSame=((x+(?y))>>31)|(!(signx^signy));//判斷是否小于等于intsignDiffer=signx&(!signy);returnsignDiffer|signSame;}intsx=!!(x?31);//判斷符號(hào)intsy=!!(y>>31);intz=y+(~x+l);//y-xints=!(z>>31);return(!(sx人sy)&s)|((sx'sy)&sx);/*intdifference=(?x+l)+y;/*y—x*/return((x&?y)|(x&~difference)I(?y&?difference))?31&0x1;/*通過x,y,difference的卡諾圖求解*/*/補(bǔ)碼=反碼+1前兩步取x、y的符號(hào)位,第三步中(x+(?y))>>31為當(dāng)x-y-1為負(fù)數(shù)時(shí)取1,!(signx-signy)為兩者相同時(shí)取1,兩者相或即x<=y時(shí)signSame為1,第四步即當(dāng)x<O,y>0時(shí)signDiffer為1。最后一步即當(dāng)x<0,y>0時(shí)必返回1,其余情況則x<=y返回1。效果即為假如x仁y,則返回1,否則返回0。intilog2(intx){intbitsNumber=0;bitsNumber=(!!(x>>16))?4;bitsNumber=bitsNumber+((!!(x?(bitsNumber+8)))?3);bitsNumber=bitsNumber+((!!(x?(bitsNumber+4)))<<2);bitsNumber=bitsNumber+((!!(x>>(bitsNumber+2)))?1);bitsNumber=bitsNumber+(!!(x?(bitsNumbe147r+1)));bitsNumber=bitsNumber+(!!bitsNumber)+(^0)+(!(l~x));returnbitsNumber;}/*inti1og2(intx){jx=x>>1;/*通過計(jì)算把1右移到的次數(shù)來實(shí)現(xiàn)ilog2的函數(shù)文/x=X|X>>1;x=x|x>>2;x=x|x>>4;x=xIx>>8;x=x|x>>16;/*運(yùn)用或和右移,把1后的所有0變?yōu)?*/,intcount=0;intn=0xlI0xl<<8|0x1?16|OX1?24;count+=x&n;count+=x>>l&n;jcount+=x?2&n;count+=x>>3&n;jcount+=x>>4&n;jcount+=x>>5&n;count+=x>>6&n;count+=x>>7&n;return(count&0xf)+(count?8&0xf)+(count>>16&0xf)+(count?24&0xf);/*即BitCount函數(shù)*/}*/本題與bitcout的方法相似,也為二分法。bitsNumber=(!!(x?l6))。4即x向右移16位后若若大于0即得到(10000%=16,否則得到0。這是判斷最高位是否不為0,若不為0則包含2的16次方。即得到最高位的1og數(shù)。同理bitsNumber=bitsNumber+((!!(x>>(bitsNumber+8)))<<3);bitsNumber=bitsNumber+((!!(x?(bitsNumber+4)))?2);bitsNumber=bitsNumber+((!!(x>>(bitsNumber+2)))<<1);bitsNumber=bitsNumber+(!!(x?(bitsNumber+1)));為判斷從高到底各位的log情況,這個(gè)方法將每位分開求1og并相加。bitsNumber=bitsNumber+(!IbitsNumber)+(~0)+(!(l'x));這一句是當(dāng)x為零時(shí),還需要減去1才干得到對(duì)的的數(shù)值。unsignedfloatneg(unsigneduf){unsignedresuit;unsignedtmp;tmp=uf&(0x7fffffff);resu1t=uf*0x80000000;if(tmp>0x7f800000)resu1t=uf;returnresu1t;)tmp=uf&(0x7fffffff)為將uf的符號(hào)位改為0。resu1t=uf人0x80000000即當(dāng)uf不是NAN,通過加0x80000000來改變符號(hào)位。if(tmp>0x7f800000)result=uf;Ox7f800000即無窮大,假如imp的值比無窮大還大,那就是NAN,則返回uf。unsignedfloat_i2f(intx){unsignedshiftLeft=0;unsignedafterShift,tmp,flag;//定義尾數(shù),進(jìn)位數(shù)unsignedabsX=x;//unsignedsign=0;if(x==0)return0;if(x<0)(sign=0x80000000;absX二一x;)afterShift=absX;while(1)(tmp=afterShift;afterShift<<=1;shiftLeft++;if(tmp&Ox80000000)break;)if((afterShift&0x0Iff)>0xOlOO)f1ag=1;elseif((afterShift&0x03ff)==0x0300)f1ag=1;elseflag=0;returnsign+(afterShift>>9)+((159-shiftLeft)<<23)+flag;)本題沒有理解,都是用的網(wǎng)上的代碼。unsignodfloat_twice(unsigncduf){unsignedf=uf;if((f&0x7F800000)=0){f=((f&0x007FFFFF)<<1)|(0x80000000&f);}elseif((f&0x7F800000)!=0x7F800000){f=f+0x00800000;}returnf;)第一個(gè)if語句判斷非規(guī)格化的數(shù)。其中(f&0x007FFFFF)〈。作用為令符號(hào)位和階碼被屏蔽,令尾數(shù)左移。(0x80000000&f)是將符號(hào)位恢復(fù)。第二個(gè)elseif語句判斷即為規(guī)格化數(shù)。f=f+0x00800000即若是規(guī)格化數(shù),對(duì)它的階碼加1。假如都不滿足的話最后會(huì)返回uf本來的值。實(shí)驗(yàn)結(jié)果及分析:sunlight@ubuntu:~FileEditViewSearchTerminalHelpsunlight@ubuntu:~$./diebits.c/usr/include/stdc-predef.h:l:Warning:Non-includablefile<command-line>includedfromincludablefile/usr/tnclude/stdc-predef.h.CompilationSuccessful(1warning)sunltght@ubuntu:~$./die-ebits.c/usr/tnclude/stdc-predef.h:1:Warntng:Non-includablefile<command-ltne>includedfromincludablefile/usr/include/stdc-predef.h.die:bits.c:142:bitAnd:4operatorsdlc:btts.c:154:getByte:3operatorsdie:bits.c:166:logicalShift:6operatorsdie:bits.c:201:bitCount:33operatorsdie:bits.c:211:bang:6operatorsdlc:btts.c:220:tmtn:1operatorsdie:bits.c:233:fitsBits:6operatorsdie:bits.c:249:divpwr2:7operatorsdie:bits.c:259:negate:2operatorsdie:bits.c:269:isPositive:4operatorsdie:bits.c:283:isLessOrEqual:11operatorsdlc:btts.c:303:tl.og2:35operatorsdie:bits.c:323:float_neg:3operatorsdie:bits.c:363:floa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2002年江蘇省連云港市中考數(shù)學(xué)真題【含答案、解析】
- 考研復(fù)習(xí)-風(fēng)景園林基礎(chǔ)考研試題必考題附答案詳解
- 風(fēng)景園林基礎(chǔ)考研資料試題及答案詳解【各地真題】
- 《風(fēng)景園林招投標(biāo)與概預(yù)算》試題A附參考答案詳解【研優(yōu)卷】
- 2025-2026年高校教師資格證之《高等教育法規(guī)》通關(guān)題庫附參考答案詳解(a卷)
- 2024年濟(jì)南演藝集團(tuán)有限責(zé)任公司人員招聘筆試備考題庫及答案詳解一套
- 民事檢察和解制度研究
- “智能低空·融合創(chuàng)新”2025年智能化測(cè)繪無人機(jī)技術(shù)交流會(huì)在南昌召開
- 2025年公基常識(shí)試題及答案解析(180題)
- 2024年演出經(jīng)紀(jì)人之演出經(jīng)紀(jì)實(shí)務(wù)押題練習(xí)試卷完整
- 中建鋼筋工程優(yōu)化技術(shù)策劃指導(dǎo)手冊(cè) (一)
- 校企合作員工培訓(xùn)協(xié)議
- 民族團(tuán)結(jié)主題班會(huì)
- 長郡教育集團(tuán)2025屆中考生物適應(yīng)性模擬試題含解析
- 2025-2030全球自組網(wǎng)芯片行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年異位妊娠診斷與治療策略研究綜述
- DB3301T 0442-2024 非物質(zhì)文化遺產(chǎn)西湖綢傘制作技藝
- 《社會(huì)保障概論》期末考試復(fù)習(xí)題庫(含答案)
- 【MOOC】《研究生英語科技論文寫作》(北京科技大學(xué))中國大學(xué)MOOC慕課答案
- 人工智能與產(chǎn)業(yè)鏈供應(yīng)鏈安全
- 飛行簽派員定期復(fù)訓(xùn):簽派資源管理
評(píng)論
0/150
提交評(píng)論