C語言的各類變量和零值的比較詳解
1.波爾變量和零值比較
在C語言中本來是不存在bool類型的,但在C99標準中加入了bool類型。

在C99標準中引入了_Bool類型,在vs中將bool類型進行了宏定義,而_Bool類型使微軟自己設計的一種類型,在別的編譯器上不具有可移植性,故這里我們使用bool類型。
接下來我們進入我們的正題:
假設布爾變量名稱為flag,那它與零值的比較在if語句中表示如下:
if(flag)? ? ? ? ? //表示flag為真
if(!flag)? ? ? ?//表示flag為假??
在C++標準中,布爾類型常量和整數(shù)、指針之間的轉(zhuǎn)換規(guī)則為:
false->0 true->1
0->false true->非0值
但對于不同的實現(xiàn)對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不應該一樣嗎?為什么這里卻有如此大的差別?
這里涉及到了浮點數(shù)的存數(shù)和缺失。
讓我們在看一段代碼:
?
在數(shù)學上我們認為這兩個數(shù)使不相等的,但在32位計算器上認為這兩個數(shù)是相等的。
所以我們?nèi)绻麅蓚€同符號的浮點數(shù)的差的絕對值在一個范圍內(nèi)我們就認為這兩個數(shù)使相等的,否則激素不相等的。所以我們應該怎樣去實現(xiàn)呢?
代碼如下:

我們引入了<math.h>和<float.h>兩個頭文件來實現(xiàn)我們的需求,這里我們引入了FLT_EPSILON?這個精度范圍來比較兩個float類型的數(shù),除了這個精度范圍還有DBL_EPSILON精度范圍用來比較double類型,這里我們就不舉例了。
4.指針和零值比較
指針變量的空為NULL,即不指向任何對象,盡管NULL和0值相同,但表達意義卻不同。

假設指針變量為p,它與零值比較的if語句實現(xiàn)為:
if(p==NULL)? ? ? ? //p與NULL比較,來顯示p使指針變量
if(p!=NULL)
?盡量避免寫成如下形式
if(p)? ? ?//容易誤解成bool類型變量
if(!p)
或者這種
if(p==0)? ?//容易誤解成整形類型變量
if(p!=0)
這四類比較希望大家有所收獲。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語言入門篇--注釋,關(guān)鍵字typedef及轉(zhuǎn)義字符詳解
本篇文章是c語言基礎篇,主要為大家介紹了C語言的關(guān)鍵字typedef,注釋,轉(zhuǎn)義字符的基本理論知識,希望可以幫助大家快速入門c語言的世界,更好的理解c語言2021-08-08
c語言結(jié)構(gòu)體字節(jié)對齊的實現(xiàn)方法
在c語言的結(jié)構(gòu)體里面一般會按照某種規(guī)則去進行字節(jié)對齊。本文就來介紹一下如何實現(xiàn),具有一定的參考價值,感興趣的可以了解下2021-07-07
從txt中讀入數(shù)據(jù)到數(shù)組中(fscanf)的實現(xiàn)代碼
下面小編就為大家?guī)硪黄獜膖xt中讀入數(shù)據(jù)到數(shù)組中(fscanf)的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
利用C++?OpenCV?實現(xiàn)從投影圖像恢復仿射特性
我們通過相機拍攝的圖片存在各種畸變,其中投影畸變使得原本平行的直線不再平行,就會產(chǎn)生照片中近大遠小的效果。本文將具體介紹如何利用OPenCV實現(xiàn)從投影圖像恢復仿射特性,接下來跟著小編一起學習吧2021-11-11
C語言數(shù)組長度的計算方法實例總結(jié)(sizeof與strlen)
數(shù)組一旦創(chuàng)建,程序運行期間,長度不可改變,下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)組長度的計算方法,主要利用的是sizeof與strlen,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06

