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類型相互轉換可能會出現的問題
- int -> float
當int比較精確時,可能會被舍入 - double -> float
當double較大時,可能會溢出;
當double比較精確時,可能會舍入; - float/double -> int
當較大時,可能會溢出; 當有小數部分時,會向0舍入(1.x舍入爲1,-1.x舍入爲-1)