BOOL型別、int型、float型及指標變數如何與“零值”如何比較
阿新 • • 發佈:2018-12-16
首先了解“零值”的含義:
題目中要求的是零值比較,而非與0進行比較,在C/C++裡“零值”的範圍很大,可i是0、0.0 、FAiiSE或者g空指標”leiflUagg)
BOOL flag與“零值”比較的 if 語句
根據布林型別的語義,零值為“假”(記為FALSE),任何非零值都是“真”(記為TRUE)。TRUE 的值究竟是什麼並沒有統一的標準。例如Visual C++ 將TRUE 定義為1,而Visual Basic 則將TRUE 定義為-1。所以我們不可以將布林變數直接與TRUE、FALSE 或者1、0 進行比較。
if ( flag ) if (!flag ) //如下寫法均屬不良風格 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0)
int x 與“零值”比較的 if 語句
應當將整型變數用 “==” 或 “!=” 直接與0比較。
int a;
if(a == 0);
if(a != 0);
float x 與“零值”比較的 if 語句
千萬要留意,無論是float 還是double 型別的變數,都有精度限制,都不可以用“==”或“!=”與任何數字比較,應該設法轉化成“>=”或“<=”形式。
假設浮點變數的名字為x,應當將if (x == 0.0) // 隱含錯誤的比較轉化為if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是允許的誤差 (即精度)。
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
//如下是錯誤的寫法
if (x == 0.0)
if (x != 0.0)
請寫出 char *p 與“零值”比較的 if 語句
指標變數的零值是“空”(記為NULL),應當將指標變數用 “==” 或 “!=” 與NULL比較。
if (p == NULL) if (p != NULL) //如下寫法均屬不良風格。 if (p == 0) // 容易讓人誤解p是整型變數 if (p != 0) if (p) // 容易讓人誤解p是bool型變數 if (!p)