下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
計算機組成實驗實驗1:實驗題目:dalalab-handout實驗目的:根據(jù)bits.c中的規(guī)定補全其中的函數(shù),并根據(jù)README中的規(guī)定在linux環(huán)境下檢測函數(shù)是否符合規(guī)定。實驗環(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;)本題采用二分法,先計算x每兩位中1的個數(shù),并用相應的兩位來儲存這個個數(shù)。然后計算每四位1的個數(shù),再用相應的四位進行儲存。依次類推,最后整合得到16位中1的個數(shù),即為x中1的個數(shù)并輸出。intbang(intx){return(~((x(~x+l))>>31))&1;)(x|(~x+l)即當X為0時,結果為(00???0)2(31個0)。其余情況最首位均為1。因此右移31位后再取反只有x=0時最后一位為1。再&1取最后一位。因此當x=0時得到1,其余情況得到0。inttmin(void){return1?31;}1<<31即(100…0)z(31個0)。其中1是符號位。即為負零,以表達最小的整數(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可被表達為一個n位整數(shù),結果為!0,即返回為1。兩者不同則不可表達為n位整數(shù),結果為!(一個非零數(shù)),返回0。intdivpwr2(intx,intn){intsignx=x?31;intmask=(1<Xn)+(?0);intbias=signx&mask;return(x+bias)>>n;}signx=x>>31為取x的符號位,mask=(1?n)+(^0)即mask等于2nMbias=signx&mask即當x為正數(shù),signx=0,bias為0,x為負數(shù),signx=ll,bias=masko(x+bias)>>n當x為正數(shù)即x?n,得到結果符合規(guī)定。當x為負數(shù)時,需要加上偏置量2皿得到預期結果,因此加上signx,得到結果符合規(guī)定。intnegate(intx){return?x+1;)?x+1即-1-x+1=—X。得到結果對的。intisPositive(intx){return!((x>>31)|(!x));//return?(x>>31)&!!x)(x>>31)即取x的符號位,!x為邏輯取反,當x=0時!x=l,其他情況均為0.(x?31)|(!x)即當x=0時得到1,x為負數(shù)得到l,x為正數(shù)得到0。再進行邏輯取反,即當x為正數(shù)時返回1,x為0或負數(shù)時返回0ointisLessOrEqual(intx,inty){intsignx=x?31;〃判斷符號intsigny=y>>31;intsignSame=((x+(?y))>>31)|(!(signx^signy));//判斷是否小于等于intsignDiffer=signx&(!signy);returnsignDiffer|signSame;}intsx=!!(x?31);//判斷符號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的卡諾圖求解*/*/補碼=反碼+1前兩步取x、y的符號位,第三步中(x+(?y))>>31為當x-y-1為負數(shù)時取1,!(signx-signy)為兩者相同時取1,兩者相或即x<=y時signSame為1,第四步即當x<O,y>0時signDiffer為1。最后一步即當x<0,y>0時必返回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;/*通過計算把1右移到的次數(shù)來實現(xiàn)ilog2的函數(shù)文/x=X|X>>1;x=x|x>>2;x=x|x>>4;x=xIx>>8;x=x|x>>16;/*運用或和右移,把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情況,這個方法將每位分開求1og并相加。bitsNumber=bitsNumber+(!IbitsNumber)+(~0)+(!(l'x));這一句是當x為零時,還需要減去1才干得到對的的數(shù)值。unsignedfloatneg(unsigneduf){unsignedresuit;unsignedtmp;tmp=uf&(0x7fffffff);resu1t=uf*0x80000000;if(tmp>0x7f800000)resu1t=uf;returnresu1t;)tmp=uf&(0x7fffffff)為將uf的符號位改為0。resu1t=uf人0x80000000即當uf不是NAN,通過加0x80000000來改變符號位。if(tmp>0x7f800000)result=uf;Ox7f800000即無窮大,假如imp的值比無窮大還大,那就是NAN,則返回uf。unsignedfloat_i2f(intx){unsignedshiftLeft=0;unsignedafterShift,tmp,flag;//定義尾數(shù),進位數(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;)第一個if語句判斷非規(guī)格化的數(shù)。其中(f&0x007FFFFF)〈。作用為令符號位和階碼被屏蔽,令尾數(shù)左移。(0x80000000&f)是將符號位恢復。第二個elseif語句判斷即為規(guī)格化數(shù)。f=f+0x00800000即若是規(guī)格化數(shù),對它的階碼加1。假如都不滿足的話最后會返回uf本來的值。實驗結果及分析: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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山東化工職業(yè)學院單招職業(yè)適應性考試題庫及參考答案詳解1套
- 2026年遵義醫(yī)藥高等??茖W校單招職業(yè)適應性測試題庫及答案詳解1套
- 2026年江西藝術職業(yè)學院單招職業(yè)傾向性考試題庫及參考答案詳解
- 2026年漳州職業(yè)技術學院單招職業(yè)適應性考試題庫及答案詳解1套
- 2026年長春師范高等??茖W校單招職業(yè)適應性測試題庫及完整答案詳解1套
- 2026年遼寧輕工職業(yè)學院單招職業(yè)傾向性考試題庫及參考答案詳解
- 2026年江蘇財會職業(yè)學院單招職業(yè)傾向性考試題庫及完整答案詳解1套
- 2026年四川建筑職業(yè)技術學院單招職業(yè)適應性測試題庫及完整答案詳解1套
- 2026年內蒙古呼倫貝爾市單招職業(yè)傾向性考試題庫含答案詳解
- 2026年山西運城農業(yè)職業(yè)技術學院單招職業(yè)傾向性考試題庫及答案詳解1套
- 一點點奶茶店營銷策劃方案
- 2025年生產安全事故典型案例
- 法律服務行業(yè)數(shù)字化轉型與2025年挑戰(zhàn)與機遇報告
- 幼兒園教師職業(yè)道德典型案例
- 公司投標知識培訓內容課件
- 外墻真石漆專項施工方案
- 信息安全供應商培訓課件
- 9.3《聲聲慢》(尋尋覓覓)課件+2025-2026學年統(tǒng)編版高一語文必修上冊
- 七年級數(shù)學數(shù)軸上動點應用題
- 自主導航移動機器人 (AMR) 產業(yè)發(fā)展藍皮書 (2023 版)-部分1
- 典型事故與應急救援案例分析
評論
0/150
提交評論