各種數據類型和0比較
1.bool類型和0比較
不可將布爾變量直接與TRUE、FALSE或者1、0進行比較。
假設布爾變量名字為flag,它與零值比較的標 准if語句如下:
if (flag) // 表示flag為真
if (!flag) // 表示flag為假
其他為不良寫法。
2、 整型變量與零值比較
應當將整型變量用 “==”或“!=”直接與0比較。
假設整型變量的名字為value,它與零值比較的標准if語句如下:
if (value == 0)
if(value != 0)
3 、浮點變量與零值比較
不可將浮點變量用 “==”或“!=”與任何數字比較。
具體的說,實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學記數法。所以浮點數在運算過程中通常伴隨着因為無法精確表示而進行的近似或舍入。用"=="來比較兩個double應該相等的類型,返回真值完全是不確定的。計算機對浮點數的進行計算的原理是只保證必要精度內正確即可。
無論是float還是double類型的變量,都有精度限制。所以一定要避免將浮點變量用“==” 或“!=”與數字比較,應該設法轉化成“>=”或“<=”形式。
假設浮點變量的名字為x,
應當將 if (x == 0.0) // 隱含錯誤的比較
轉化為 if ((x>=-EPSINON) &&(x<=EPSINON)) 或者 if(abs(x) <= EPSINON)
其中EPSINON是允許的誤差(即精度)。 const float EPSINON = 0.000001,至於為什么取0.000001,可以自己按實際情況定義。
4 、指針變量與零值比較
應當將指針變量用 “==”或“!=”與NULL比較。
指針變量的零值是“空”(記為NULL)。盡管NULL的值與0相同,但是兩者意義不同。假設指針變量的名 字為p,它與零值比較的標准if語句如下:
if (p ==NULL) // p與NULL顯式比較,強調p是指針變量
if (p != NULL)