C語言的各類變量和零值的比較詳解
1.波爾變量和零值比較
在C語言中本來是不存在bool類型的,但在C99標準中加入瞭bool類型。
在C99標準中引入瞭_Bool類型,在vs中將bool類型進行瞭宏定義,而_Bool類型使微軟自己設計的一種類型,在別的編譯器上不具有可移植性,故這裡我們使用bool類型。
接下來我們進入我們的正題:
假設佈爾變量名稱為flag,那它與零值的比較在if語句中表示如下:
if(flag) //表示flag為真
if(!flag) //表示flag為假
在C++標準中,佈爾類型常量和整數、指針之間的轉換規則為:
false->0 true->1
0->false true->非0值
但對於不同的實現對ture的表示也可以不同,所以我們要避免一下操作:
int flag = 1; if(flag==ture){ ; }
因此以後在進行bool類型與零比較時,我們避免使用判斷形式。
2.整形變量和零進行比較
假設整形變量為ret,它與零值進行比較的if語句可以表示為:
if(ret==0)
if(ret!=0)
不可以寫成bool的類型風格
if(ret) //會讓人錯以為ret使bool類型
if(!ret)
3.浮點變量和零值比較
這裡也是我們今天所講述的重點。
這裡我們先來看一段代碼:
在我們的看來,x和y不應該一樣嗎?為什麼這裡卻有如此大的差別?
這裡涉及到瞭浮點數的存數和缺失。
讓我們在看一段代碼:
在數學上我們認為這兩個數使不相等的,但在32位計算器上認為這兩個數是相等的。
所以我們如果兩個同符號的浮點數的差的絕對值在一個范圍內我們就認為這兩個數使相等的,否則激素不相等的。所以我們應該怎樣去實現呢?
代碼如下:
我們引入瞭<math.h>和<float.h>兩個頭文件來實現我們的需求,這裡我們引入瞭FLT_EPSILON 這個精度范圍來比較兩個float類型的數,除瞭這個精度范圍還有DBL_EPSILON精度范圍用來比較double類型,這裡我們就不舉例瞭。
4.指針和零值比較
指針變量的空為NULL,即不指向任何對象,盡管NULL和0值相同,但表達意義卻不同。
假設指針變量為p,它與零值比較的if語句實現為:
if(p==NULL) //p與NULL比較,來顯示p使指針變量
if(p!=NULL)
盡量避免寫成如下形式
if(p) //容易誤解成bool類型變量
if(!p)
或者這種
if(p==0) //容易誤解成整形類型變量
if(p!=0)
這四類比較希望大傢有所收獲。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- 一篇文章帶你瞭解C語言浮點數之間的比較規則
- C++ float、double判斷是否等於0問題
- PHP中強制類型轉換的示例詳解
- C語言中浮點數的精度丟失問題解決
- C++實現LeetCode(驗證數字)