freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

深入理解計算機(jī)系統(tǒng)第二版資料-家庭作業(yè)答案-在線瀏覽

2024-07-31 00:46本頁面
  

【正文】 b0 = xamp。b2 =1。ans =+intsizeof(int)3。+=b2)。+=amp。7))。ans。不懂題意。~((1n) 1)B. 0[wnm]1[n]0[m]: ((1n) 1) mA. false,當(dāng)x=0,y=TMin時,x y,而y依然是Tmin,所以x y。C. false,當(dāng)x=1, y=1時,~x + ~y = 0xFFFFFFFE,而~(x+y) == 0xFFFFFFFF。E. true,最后一個bit清0,對于偶數(shù)是不變的,對于奇數(shù)相當(dāng)于1,而TMin是偶數(shù),因此該減法不存在溢出情況。A. 令x為無窮序列表示的值,可以得到x*2^k = Y + x。B. (a)1/7, (b)9/15 = 3/5, (c)7/63 = 1/9浮點數(shù)的一個特點就是,如果大于0,則可以按unsigned位表示的大小排序。注意都為0的情況即可。amp。(!sx amp。 sy) ||amp。amp。amp。amp。A. ,5表示為101, = 。位表示三個部分分別是sef,為010..010100..0。當(dāng)然,這個假設(shè)在2^(k1)=n的情況下才能成立。值為2^(n+1)1。位表示為011..10100..0。按理說,舍入到+inf就是向上舍入,而并不是找到最接近的。如果都按+inf進(jìn)行舍入,那么第四行格式B將是0 0000 0001。所以當(dāng)x==TMAX時,用float就無法精確表示,但double是可以精確表示所有32位整數(shù)的。C. true,double可以精確表示所有正負(fù)2^53以內(nèi)的所有整數(shù)。D. false,double無法精確表示2^64以內(nèi)所有的數(shù),所以該表達(dá)式很有可能不會相等。E. false,0/,(非0)/。float的k=8, n=23。最小的正非規(guī)格化數(shù)為2^(1biasn) = 2^149。最大的規(guī)格化數(shù)(二的冪)為2^(2^82 bias) = 2^127。floatx){/* Result exponent and fraction */unsigned exp,unsigned u。(x{/* Too small. Return */exp =frac =}if{/* Denormalized result */exp =frac =}if{/* Normalized result. */exp = x127。0。else255。0。|/* Return as float */return}:0 10000000 10010010000111111101011,E=128127=1,它表示的二進(jìn)制小數(shù)值為:,可知1/[001]...,所以22/[001]...。typedef unsigned float_bits。u2f(unsigned x){returnx)。f2u(float*((unsigned*)amp。}boolfloatf2u(f2)}boolunsigned exp =amp。0xFF。0x7FFFFF。exp ==amp。!=}boolunsigned exp =amp。0xFF。0x7FFFFF。exp ==amp。0。testFun(0。//test for all 2^32 valuefloat_bits fb =floatfun2(u2f(x))。ff)){printf(%x error\n,return}x++。 printf(Test OK\n)。return}最后的testFun是用來測試fun1和fun2是否對每種可能的輸入都輸出相同的值,fun1為題中所要求的函數(shù),fun2為float版本。float_absval(float_bits f){if(is_nan(f))f。returnamp。0x7FFFFFFF。float_absval_f(floatreturnelsefabs(f)。在測試的時候發(fā)現(xiàn)0x7F800001的時候不對了。即令x = 0x7F800001。奇怪的nan,第22位一定是1。所以,我將testFun中的一個條件變成了:if(!is_float_equal(fb, ff) amp。想了想,這和高位低位排列是無關(guān)的。也有可能是硬件本身的原因了。float_bitsreturnelsef^0x80000000。float_negate_f(floatreturnreturn}就是將最高位反位。float_half(float_bits f){unsigned sign = f31。(f23)unsigned frac = famp。if(exp ==return|+1)amp。((frac1)amp。else1)sign31((|+1)amp。((frac1)amp。else!=return| (exp1)23frac。return}floatf){if(!isnan(f))(float)*f。return}需要注意的是,舍入采用的是向偶數(shù)舍入。(好吧,書上在浮點數(shù)位級編碼規(guī)則中說過了,眼殘沒看到)最后,非規(guī)格化的平滑效果讓exp==1時的程序變得比較簡潔。float_twice(float_bits f){unsigned sign = f31。(f23)unsigned frac = famp。if(exp ==return|elsereturn||else254)sign310xFF23。return}floatf){if(!isnan(f))(float)2*f。return}比float_half簡單一些。float_bitsi){if(i ==returnunsigned x = i0?i:i。sign = i0?0:1。w =intfor(j=w1。j=0。j){(xj)break。127。frac。+if(j23)elseunsigned mask =if(mask)(1(j24))frac++。//需要舍入到大值else(xamp。==amp。1))(124))sign31exp23fracamp。}voidx =do{float_bits fb =float(float)x。ff)){printf(error in %d:%x %x\n,fb,return。}while(x!=0)。}無恥地使用了循環(huán)。不過好在大方向都知道,所以沒有花多少時間,主要糾結(jié)點還是在舍入那塊。intint(f23)int(famp。|exp127。returnif(exp31)0x80000000。//絕對值不大于2^31(131)if(exp23)=else=returnfrac : frac。test2(){int0。m =int(int)u2f(x)。!= n){printf(error in %x:%d %d\n,m,return。}while(x!=0)。}在exp0和=31上犯了小錯誤。其實1這個整數(shù)就是exp==0的。而這里剛好用TMin來表示越界,因此不用關(guān)心TMin的表示。decode2(intintintret。= y。//line 2ret = z。//line 3ret15。=//line 5return}大概算法如下:x的高32位為xh,低32位為xl。dest_h = (xl*ys)_l + (xh*y)_l + (xl*y)_hdest_l = (xl*y)_l注意,所有的乘法都是unsigned*unsigned。注意n在這里是一個很小的數(shù),用8位就能表示,也可以用n=n%256表示。 loop(intintresult =intfor(mask =!=((unsigned)mask)n){result(mask}return}xp?*xp:0這個語句是不能被編譯成條件傳送語句的。我們要寫一個和該功能完全一樣的能編譯成條件傳送語句的函數(shù)。int*xp){int0。*p = xp?xp:amp。return}MODE_A: result =*p2。break。*p1*p2。*p2 = result。break。*p1。*p2 =MODE_D:*p1。17。break。1。break。switch_prob(intintresult = x。0x28:case=case=case== x。0x2d:resultcase//也可以不要default:result0x11。result。由匯編代碼可知:S*T = 63。R*S*T = 2772/4。感覺可以用j,而不是比較j和n。var_prod_ele(intintintintintj = n1。result =for(。j!=1。j)result*return}但是這樣得到的結(jié)果仍然會使用到存儲器。但是用到了一個常量4,就是增加a的時候,會add 4。intn,A[n][n],B[n][n],i,k){int0。*a =A[i][0]。*b =B[0][k]。*e =A[i][n]。a!=e。+=*b+=n。}return}下面是其匯編代碼的循環(huán)部分:edi是4*n,ebx和edx分別是b和a,esi是e,eax是result。L4:movl(%edx), %ecxaddl%edi, %ebxaddl%edx, %esijneL4我怎么感覺前面那個程序,編譯器應(yīng)該也會自動優(yōu)化。i在edi中,j在ecx中。transpose(intinti,j。 *a =A[i][0]。*b =A[0][i]。t =*a =*b = t。b}}}E1(n)在esi中,esi = 3n。所以E2(n) = 2n1。根據(jù)簡單的推測,我們可以知道,imull的兩個對象是 ebx和edx,最后edx移動到了(eax)中,所以ebx和edx一個是 *,并且word_sum的12行的eax是result的prod的地址,也就是result的地址。也就是說,結(jié)構(gòu)體返回值實際上是利用類似參數(shù)的變量進(jìn)行傳入(在8(%ebp)),而傳入的是返回結(jié)構(gòu)體變量的地址。8(%ebp)為result的地址。16(%ebp)。s2 (word_sum的返回值地址)在匯編中,沒懂word_sum 15: ret $4以及diff 12: subl $4, %esp的意義何在。C.傳遞結(jié)構(gòu)體參數(shù)就像正常的傳值。D.返回結(jié)構(gòu)體的通用策略:將返回變量的地址看做第一個參數(shù)傳入函數(shù)。B取四的倍數(shù)的上整數(shù) = 8。所以B的可選值為8和7。所以 A=3, B=7。首先,根據(jù)第11和12行,可以得到 CNT*size(A) = 196。ecx存儲的是bp(地址)。那么apx[apidx] 的地址是 bp + 4 + i*size(A) + pos(x) +所以 4*edx + 8 = 4 + i*size(A) + pos(x) + 4*(apidx)。那么,我們看apidx在哪里計算過。我們先這樣猜測,于是size(A) = 28,并且bp[4+28*i]的值為apidx。所以,我們的猜想是正確的。總共有多少個A呢?CNT = 196/size(A) = 7。: 0: 4: 0: 4B.總共需要8個字節(jié)。edx就是參數(shù)up(一個指針)。再看看之前的eax,eax是由(eax)
點擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1