深入理解計算機系統 第二章(CSAPP ch.2)筆記

CSAPP ch.2

Tips:

1.合理利用&&和||的短路特性

例如:指針取值前判斷指針是否非空p || *p

2.左移超過數字本身的bit數時,一般會將左移位數模數字的bit數

例如:

char x = 5; 
x << 10; 
//等效於x << (10 % 8\*sizeof(x)),即x << 2; 

實測用gcc和上述情況相同,用g++,左移後x=0

3.無符號數和有符號數比較要小心

例如:-1 > 無符號數0

4.浮點數運算不具備結合性和分配性

例如:

//加法結合性
(3.14 + 1e10) - 1e10 = 0.0
3.14 + (1e10 - 1e10) = 3.14
//乘法結合性
(1e20 * 1e20) * 1e-20 = +∞
1e20 * (1e20 * 1e-20) = 1e20
//乘法分配性
1e20 * (1e20 - 1e20) = 0.0
1e20 * 1e20 - 1e20 * 1e20 = NaN
5.c語言中int、float、double類型相互轉換可能會出現的問題
  1. int -> float
    當int比較精確時,可能會被舍入
  2. double -> float
    當double較大時,可能會溢出;
    當double比較精確時,可能會舍入;
  3. float/double -> int
    當較大時,可能會溢出; 當有小數部分時,會向0舍入(1.x舍入爲1,-1.x舍入爲-1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章