《CS:APP》第二版第三章家庭作業(yè)部分答案

<深入理解計算機系統(tǒng)> <CS: APP>

以下答案均有個人完成轉(zhuǎn)載注明出處

3.55

movl12(%ebp), %esiget x_l

movl20(%ebp), %eaxget y

movl%eax, %edx?

sarl$31, %edxget sign

movl%edx, %ecx?

imull%esi, %ecxcompute x_i_sign = sign * x_l

movl16(%ebp), %ebxget x_h

imull%eax, %ebxcompute dest_h = x_h * y

addl%ebx, %ecxcompute dest_h = x_h * y + x_l * sign

mull%esicompute?

? x_l * y

leal(%ecx, %edx), %edxcompute?x_h * y + sign * x_l + sign

movl8(%ebp), %ecxget dest

movl%eax, (%ecx)dest_l = x_l * y

movl%edx, 4(%ecx)dest_h =?( x_h * y + sign * x_l ) + sign

大致算法

取底32位加后綴l, 取高32位加后綴h, sign為符號位擴展32位的y

dest_l =( x_l * y ) 取低位

dest_h = ( sign * x_l + x_h * y )_l + (x_l *y )_h


3.56

int loop ( int x, int n)

{

?????? int result = 1431655765;

?????? intmask;

?????? for(mask = 1 << 31 ; mask != 0 ; mask = (unsigned) mask >> n) {

????????????? result ^= (x & mask) ;

?????? }

?????? returnresult;

}

A %esi x

?%edx mask

?%ebx n

?%edi %eax result

B result = 1431655765

?mask = -2147483648

C mask!=0

E 同上

F 填了


3.58

typedef enum { MODE_A, MODE_B, MODE_C,MODE_D, MODE_E } mode_t;

int switch3( int *p1, int *p2, mode_taction)

{

?????? intresult = 0;

switch ( action) {

case MODE_A; result = *p1; *p1 = *p2; break;

case MODE_B; result = *p2; *p2 = *p1; break;

?????? caseMODE_C; *p2 = 15; result = *p1; break;

?????? caseMODE_D; *p2 = *p1; result = 17; break;

?????? caseMODE_E; result = 17; break;

default: result= -1; break;

}

return result;

}


3.59

int switch_prob(int x, int n)

{

?????? intresult = x;

?????? switch(n){

????????????? case40: case 42: result <<= 3; break;

????????????? case43: result >>= 3; break;

????????????? case44: result <<= 3; result -= x;

????????????? case45; result *= result;

????????????? default: result += 17;

?????? }

?????? returnresult;

}


3.60

int A [R] [S] [T]

A:?將等式從二維擴展到三維

A [ I ] [ j ] [ k ] = * ( A + 4 * ( i * S *T + j * T + k ) )

B:

R 11 S 7 T 9


3.62

A M: 76 / 4 = 19

B %edi i, %ecx j

C

void transpose ( int A [M][M] ) {

?????? int I, j;

?????? for( i = 0; I < M; i ++ )

?????? ?????? int*a = &A[0] [i];

????????????? int*b = &A[i] [0];

????????????? for( j = 0; j < I ; j++ )

???????????????????? int t = *a;

???????????????????? *a= *b;

???????????????????? *b= t;

???????????????????? b++;

???????????????????? a+= M;

????????????? }

}



3.63

確定E1 和E2的定義

E1(n) = 3 * n

E2(n) = 2 * n – 1


3.64

A:

5行: result的address

6行: s1.v

7行: s1.p


B:

1: %ebp

2: s2.sum

3: s2.prod

4: s1.v

5: s1.p

6:返回地址

C向函數(shù)傳遞結(jié)構(gòu)參數(shù)的通用策略: 將結(jié)構(gòu)每一個元素當作本身的參數(shù)傳入

D 從函數(shù)返回結(jié)構(gòu)值的通用策略: 返回結(jié)構(gòu)變量的初始地址作用, 因為沒有寄存器可以存下一整個結(jié)構(gòu)體, 且結(jié)構(gòu)體的大小是可變的


3.66

A. 7

B typedef struct {

?????? intidx;

?????? intx [6];

} a_struct;

3.67

A

p: 0

x: 4

y: 0

next: 4

B: 這個結(jié)構(gòu)一共需要8個字節(jié)

C:

void proc ( union ele *up )

{

?????? up -> e2.next -> e1.x = * ( up-> e2.next -> e1.p ) – up -> e2. y?;

}


3.69

A

long trace ( tree_ptr tp ) {

long ret = 0;

?????? while ( tp != NULL ) {

ret = tp.val;

?????? tp = tp.left;

?????? }

?????? returnret;

}

B 輸出二叉樹最左邊的結(jié)點值


3.70

long traverse ( tree_ptr tp ) {

?????? longresult = 0;

?????? if( !tp ) return result;

?????? long VAL = tp->val;

?????? longleft = traverse ( tp->left );

?????? longresult = traverse ( tp->right );

?????? if( left < result )

????????????? result= left;

?????? if( v < result )

????????????? result= v;

?????? returnresult;

}

B 計算二叉樹所有結(jié)點中的最小值

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馋评,一起剝皮案震驚了整個濱河市覆履,隨后出現(xiàn)的幾起案子飒炎,更是在濱河造成了極大的恐慌悉抵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雄妥,死亡現(xiàn)場離奇詭異陨界,居然都是意外死亡盈咳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進店門靖秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來须眷,“玉大人,你說我怎么就攤上這事沟突』牛” “怎么了?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵惠拭,是天一觀的道長扩劝。 經(jīng)常有香客問我,道長职辅,這世上最難降的妖魔是什么棒呛? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮域携,結(jié)果婚禮上簇秒,老公的妹妹穿的比我還像新娘。我一直安慰自己涵亏,他們只是感情好宰睡,可當我...
    茶點故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布蒲凶。 她就那樣靜靜地躺著,像睡著了一般拆内。 火紅的嫁衣襯著肌膚如雪旋圆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天麸恍,我揣著相機與錄音灵巧,去河邊找鬼。 笑死抹沪,一個胖子當著我的面吹牛刻肄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播融欧,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼敏弃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了噪馏?” 一聲冷哼從身側(cè)響起麦到,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欠肾,沒想到半個月后瓶颠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡刺桃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年粹淋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑟慈。...
    茶點故事閱讀 38,637評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡桃移,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葛碧,到底是詐尸還是另有隱情谴轮,我是刑警寧澤,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布吹埠,位于F島的核電站第步,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缘琅。R本人自食惡果不足惜粘都,卻給世界環(huán)境...
    茶點故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刷袍。 院中可真熱鬧翩隧,春花似錦、人聲如沸呻纹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淑仆,卻和暖如春涝婉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔗怠。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工墩弯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寞射。 一個月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓渔工,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桥温。 傳聞我的和親對象是個殘疾皇子引矩,可洞房花燭夜當晚...
    茶點故事閱讀 43,500評論 2 348