第二章習(xí)題-ddg_第1頁
第二章習(xí)題-ddg_第2頁
第二章習(xí)題-ddg_第3頁
第二章習(xí)題-ddg_第4頁
第二章習(xí)題-ddg_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第 二 章 習(xí) 題 答 案1 給出以下概念的解釋說明。真值機(jī)器數(shù)數(shù)值數(shù)據(jù) 非數(shù)值數(shù)據(jù)無符號整數(shù)帶符號整數(shù)定點數(shù)原碼補(bǔ)碼 變形補(bǔ)碼溢出浮點數(shù)尾數(shù)階階碼 移碼階碼下溢階碼上溢規(guī)格化數(shù)左規(guī)右規(guī) 非規(guī)格化數(shù)機(jī)器零非數(shù)(NaN)BCD碼邏輯數(shù) ASCII碼 漢字輸入碼漢字內(nèi)碼機(jī)器字長大端方式小端方式 最高有效位 最高有效字節(jié)(MSB)最低有效位最低有效字節(jié)(LSB) 掩碼 算術(shù)移位邏輯移位0擴(kuò)展符號擴(kuò)展零標(biāo)志ZF溢出標(biāo)志OF 符號標(biāo)志SF進(jìn)位/借位標(biāo)志CF2 簡單回答下列問題。(1)為什么計算機(jī)內(nèi)部采用二進(jìn)制表示信息?既然計算機(jī)內(nèi)部所有信息都用二進(jìn)制表示,為什么還要用到十六進(jìn)制或八進(jìn)制數(shù)?(2)常用的定

2、點數(shù)編碼方式有哪幾種? 通常它們各自用來表示什么?(3)為什么現(xiàn)代計算機(jī)中大多用補(bǔ)碼表示帶符號整數(shù)?(4)在浮點數(shù)的基數(shù)和總位數(shù)一定的情況下,浮點數(shù)的表示范圍和精度分別由什么決定?兩者如何相互制約?(5)為什么要對浮點數(shù)進(jìn)行規(guī)格化?有哪兩種規(guī)格化操作?(6)為什么有些計算機(jī)中除了用二進(jìn)制外還用BCD碼來表示數(shù)值數(shù)據(jù)?(7)為什么計算機(jī)處理漢字時會涉及到不同的編碼(如,輸入碼、內(nèi)碼、字模碼)?說明這些編碼中哪些用二進(jìn)制編碼,哪些不用二進(jìn)制編碼,為什么?3實現(xiàn)下列各數(shù)的轉(zhuǎn)換。(1) (25.8125)10= (?)2= (?) 8= (?) 16(2) (101101.011)2 = (?)10=

3、 (?) 8= (?) 16= (?) 8421(3) (0101 1001 0110.0011)8421 = (?)10= (?) 2= (?) 16(4) (4E.C)16 = (?)10= (?) 24 假定機(jī)器數(shù)為8位(1位符號,7位數(shù)值),寫出下列各二進(jìn)制數(shù)的原碼表示。+0.1001,0.1001,+1.0,1.0,+0.010100,0.010100,+0,05 假定機(jī)器數(shù)為8位(1位符號,7位數(shù)值),寫出下列各二進(jìn)制數(shù)的補(bǔ)碼和移碼表示。+1001,1001,+1,1,+10100,10100,+0,06 已知 x補(bǔ),求x(1)x補(bǔ)=11100111 (2)x補(bǔ)=10000000(

4、3)x補(bǔ)=01010010 (4)x補(bǔ)=110100117 某32位字長的機(jī)器中帶符號整數(shù)用補(bǔ)碼表示,浮點數(shù)用IEEE 754標(biāo)準(zhǔn)表示,寄存器R1和R2的內(nèi)容分別為R1:0000108BH,R2:8080108BH。不同指令對寄存器進(jìn)行不同的操作,因而不同指令執(zhí)行時寄存器內(nèi)容對應(yīng)的真值不同。假定執(zhí)行下列運(yùn)算指令時,操作數(shù)為寄存器R1和R2的內(nèi)容,則R1和R2中操作數(shù)的真值分別為多少?(1) 無符號整數(shù)加法指令(2) 帶符號整數(shù)乘法指令(3) 單精度浮點數(shù)減法指令8 假定機(jī)器M的字長為32位,用補(bǔ)碼表示帶符號整數(shù)。表2.12中第一列給出了在機(jī)器M上執(zhí)行的C語言程序中的關(guān)系表達(dá)式,請參照已有的表欄

5、內(nèi)容完成表中后三欄內(nèi)容的填寫。表2.12 題8用表關(guān)系表達(dá)式運(yùn)算類型結(jié)果說明0 = 0U1 01 2147483647 12147483647U 2147483647 12147483647 (int) 2147483648U1 2(unsigned) 1 2無符號整數(shù)有符號整數(shù)01 111B (2321) 000B(0)0111B (2311) 1000B (231)9 在32位計算機(jī)中運(yùn)行一個C語言程序,在該程序中出現(xiàn)了以下變量的初值,請寫出它們對應(yīng)的機(jī)器數(shù)(用十六進(jìn)制表示)。(1)int x=-32768 (2)short y=522(3)unsigned z=65530(4)char

6、c=(5)float a=-1.1(6)double b=10.510. 在32位計算機(jī)中運(yùn)行一個C語言程序,在該程序中出現(xiàn)了一些變量,已知這些變量在某一時刻的機(jī)器數(shù)(用十六進(jìn)制表示)如下,請寫出它們對應(yīng)的真值。(1)int x:FFFF0006H (2)short y:DFFCH(3)unsigned z:FFFFFFFAH(4)char c:2AH5)float a:C4480000H(6)double b:C024800000000000H11. 以下給出的是一些字符串變量在內(nèi)存中存放的字符串機(jī)器碼,請根據(jù)ASCII碼定義寫出對應(yīng)的字符串。指出代碼0AH和00H對應(yīng)的字符的含義。(1)c

7、har *mystring1:68H 65H 6CH 6CH 6FH 2CH 77H 6FH 72H 6CH 64H 0AH 00H (2)char *mystring2:77H 65H 20H 61H 72H 65H 20H 68H 61H 70H 70H 79H 21H 00H12. 以下給出的是一些字符串變量的初值,請寫出對應(yīng)的機(jī)器碼。(1)char *mystring1=./myfile (2)char *mystring2=OK, good!13. 已知C語言中的按位異或運(yùn)算(“XOR”)用符號“”表示。對于任意一個位序列a,aa=0,C語言程序可以利用這個特性來實現(xiàn)兩個數(shù)值交換的功

8、能。以下是一個實現(xiàn)該功能的C語言函數(shù): 1void xor_swap(int *x, int *y) 2 3*y=*x *y;/* 第一步 */4*x=*x *y;/* 第二步 */5*y=*x *y;/* 第三步 */ 6 假定執(zhí)行該函數(shù)時*x和*y的初始值分別為a和b,即*x=a且*y=b,請給出每一步執(zhí)行結(jié)束后,x和y各自指向的內(nèi)存單元中的內(nèi)容分別是什么?14. 假定某個實現(xiàn)數(shù)組元素倒置的函數(shù)reverse_array調(diào)用了第13題中給出的xor_swap函數(shù): 1void reverse_array(int a, int len)2 3int left, right=len-1;4fo

9、r (left=0; left 0;4 已知C語言標(biāo)準(zhǔn)庫函數(shù)strlen原型聲明為“size_t strlen(const char *s);”,其中,size_t被定義為unsigned int類型。請問:函數(shù)compare_str_len在什么情況下返回的結(jié)果不正確?為什么?為使函數(shù)正確返回結(jié)果應(yīng)如何修改代碼?19考慮以下C語言程序代碼:1int func1(unsigned word)23return (int) ( word 24);45int func2(unsigned word)67return ( (int) word 24;8假設(shè)在一個32位機(jī)器上執(zhí)行這些函數(shù),該機(jī)器使用二進(jìn)

10、制補(bǔ)碼表示帶符號整數(shù)。無符號數(shù)采用邏輯移位,帶符號整數(shù)采用算術(shù)移位。請?zhí)顚懕?.14,并說明函數(shù)func1和func2的功能。表2.14 題19用表wfunc1(w)func2(w)機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值12712825525620填寫表2.15,注意對比無符號整數(shù)和帶符號整數(shù)的乘法結(jié)果,以及截斷操作前、后的結(jié)果。表2.15 題20用表模式xyxy(截斷前)xy(截斷后)機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值無符號110010帶符號110010無符號001111帶符號001111無符號111111帶符號11111121以下是兩段C語言代碼,函數(shù)arith( )是直接用C語言寫的,而optarith

11、( )是對arith( )函數(shù)以某個確定的M和N編譯生成的機(jī)器代碼反編譯生成的。根據(jù)optarith( ),可以推斷函數(shù)arith( ) 中M和N的值各是多少?#define M #define N int arith(int x, int y)int result = 0 ;result = x*M + y/N; return result;int optarith ( int x, int y)int t = x;x = 4;x = t;if ( y 2;return x+y;22. 下列幾種情況所能表示的數(shù)的范圍是什么?(1) 16位無符號整數(shù)(2) 16位補(bǔ)碼表示的帶符號整數(shù)(3) 下

12、述格式的浮點數(shù)(基數(shù)為2,移碼的偏置常數(shù)為128)尾數(shù)S1階碼S1數(shù)符S17位原碼數(shù)值部分S18位移碼S11位S123. 以IEEE 754單精度浮點數(shù)格式表示下列十進(jìn)制數(shù)。+1.75,+19,1/8,25824設(shè)一個變量的值為4098,要求分別用32位補(bǔ)碼整數(shù)和IEEE 754單精度浮點格式表示該變量(結(jié)果用十六進(jìn)制形式表示),并說明哪段二進(jìn)制位序列在兩種表示中完全相同,為什么會相同?25設(shè)一個變量的值為2 147 483 647(提示:2 147 483 647=231-1),要求分別用32位補(bǔ)碼整數(shù)和IEEE754單精度浮點格式表示該變量(結(jié)果用十六進(jìn)制形式表示),并說明哪種表示其值完全

13、精確,哪種表示的是近似值。26下表給出了有關(guān)IEEE 754浮點格式表示中一些重要的非負(fù)數(shù)的取值,表中已經(jīng)有最大規(guī)格化數(shù)的相應(yīng)內(nèi)容,要求填入其他浮點數(shù)格式的相應(yīng)內(nèi)容。表2.16 題26用表項目階碼尾數(shù)單精度雙精度以2的冪次表示的值以10的冪次表示的值以2的冪次表示的值以10的冪次表示的值01最大規(guī)格化數(shù)最小規(guī)格化數(shù)最大非規(guī)格化數(shù)最小非規(guī)格化數(shù)+NaN11111110111(22-23)21273.41038(22-52)210231.81030827已知下列字符編碼:A為100 0001,a為110 0001,0為011 0000,求E、e、f、7、G、Z、5的7位ACSII碼和在第一位前加入

14、奇校驗位后的8位編碼。28假定在一個程序中定義了變量x、y和i,其中,x和y是float型變量(用IEEE754單精度浮點數(shù)表示),i是16位short型變量(用補(bǔ)碼表示)。程序執(zhí)行到某一時刻,x= 0.125、y=7.5、i=100,它們都被寫到了主存(按字節(jié)編址),其地址分別是100,108和112。請分別畫出在大端機(jī)器和小端機(jī)器上變量x、y和i中每個字節(jié)在主存的存放位置。29. 對于圖2.6,假設(shè)n=8,機(jī)器數(shù)X和Y的真值分別是x和y。請按照圖2.6的功能填寫表2.17,并給出對每個結(jié)果的解釋。要求機(jī)器數(shù)用十六進(jìn)制形式填寫,真值用十進(jìn)制形式填寫。表2.17 題29用表表示XxYyX+Yx

15、+yOFSFCFX-Yx-yOFSFCF無符號0xB00x8C帶符號0xB00x8C無符號0x7E0x5D帶符號0x7E0x5D30. 在字長為32位的計算機(jī)上,有一個函數(shù)其原型聲明為“int ch_mul_overflow(int x, int y);”,該函數(shù)用于對兩個int型變量x和y的乘積判斷是否溢出,若溢出則返回1,否則返回0。請使用64位精度的整數(shù)類型long long來編寫該函數(shù)。31對于第2.7.5節(jié)中例2.31存在的整數(shù)溢出漏洞,如果將其中的第5行改為以下兩個語句:unsigned long long arraysize=count*(unsigned long long)s

16、izeof(int); int *myarray = (int *) malloc(arraysize); 已知C語言標(biāo)準(zhǔn)庫函數(shù)malloc的原型聲明為“void *malloc(size_t size);”,其中,size_t定義為unsigned int類型,則上述改動能否消除整數(shù)溢出漏洞?若能則說明理由;若不能則給出修改方案。32. 已知一次整數(shù)加法、一次整數(shù)減法和一次移位操作都只需一個時鐘周期,一次整數(shù)乘法操作需要10個時鐘周期。若x為一個整型變量,現(xiàn)要計算55*x,請給出一種計算表達(dá)式,使得所用時鐘周期數(shù)最少。33假設(shè)x為一個int型變量,請給出一個用來計算x/32的值的函數(shù)div3

17、2。要求不能使用除法、乘法、模運(yùn)算、比較運(yùn)算、循環(huán)語句和條件語句,可以使用右移、加法以及任何按位運(yùn)算。34. 無符號整數(shù)變量ux和uy的聲明和初始化如下: unsigned ux=x; unsigned uy=y; 若sizeof(int)=4,則對于任意int型變量x和y,判斷以下關(guān)系表達(dá)式是否永真。若永真則給出證明;若不永真則給出結(jié)果為假時x和y的取值。 (1)(x*x) = 0 (2)(x-10(3)x0 | -x0 | -x=0(5)x&0xf!=15 | (x28)y=(-x2)2) = x (10)x*4+y*8=(x2)+(y2)+(y3) (12)x*y=ux*uy(13)x+

18、y=ux+uy(14)x*y+ux*uy=-x35. 變量dx、dy和dz的聲明和初始化如下: double dx = (double) x; double dy = (double) y; double dz = (double) z; 若float和double分別采用IEEE 754單精度和雙精度浮點數(shù)格式,sizeof(int)=4,則對于任意int型變量x、y和z,判斷以下關(guān)系表達(dá)式是否永真。若永真則給出證明;若不永真則給出結(jié)果為假時x和y的取值。 (1)dx*dx = 0(2)(double)(float) x = dx(3)dx+dy = (double) (x+y)(4)(dx

19、+dy)+dz = dx+(dy+dz)(5)dx*dy*dz = dz*dy*dx(6)dx/dx = dy/dy36. 在IEEE 754浮點數(shù)運(yùn)算中,當(dāng)結(jié)果的尾數(shù)出現(xiàn)什么形式時需要進(jìn)行左規(guī),什么形式時需要進(jìn)行右規(guī)?如何進(jìn)行左規(guī),如何進(jìn)行右規(guī)?37在IEEE 754浮點數(shù)運(yùn)算中,如何判斷浮點運(yùn)算的結(jié)果是否溢出?38. 分別給出不能精確用IEEE 754單精度和雙精度格式表示的最小正整數(shù)。39采用IEEE 754單精度浮點數(shù)格式計算下列表達(dá)式的值。(1)0.75+( 65.25)(2)0.75( 65.25)40. 以下是函數(shù)fpower2的C語言源程序,它用于計算2x的浮點數(shù)表示,其中調(diào)用

20、了函數(shù)u2f,u2f用于將一個無符號整數(shù)表示的0/1序列作為float類型返回。請?zhí)顚慺power2函數(shù)中的空白部分,以使其能正確計算結(jié)果。 1float fpower2(int x) 23unsigned exp, frac, u;45if (x) /* 值太小,返回0.0 */6exp = ;7frac = ;8 else if (x ) /* 返回非規(guī)格化結(jié)果 */9exp = ;10frac = ;11 else if (x ) /* 返回規(guī)格化結(jié)果 */12exp = ;13frac = ;14 else /* 值太大,返回+ */15exp = ;16frac = ;1718u = exp 23 | frac;19return u2f(u);2041. 以下是一組關(guān)于浮點數(shù)按位級進(jìn)行運(yùn)算的編程題目,其中用到一個數(shù)據(jù)類型float_bits,它被定義為unsigned int類型。以下程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論