C語(yǔ)言的各類(lèi)變量和零值的比較詳解
1.波爾變量和零值比較
在C語(yǔ)言中本來(lái)是不存在bool類(lèi)型的,但在C99標(biāo)準(zhǔn)中加入了bool類(lèi)型。
在C99標(biāo)準(zhǔn)中引入了_Bool類(lèi)型,在vs中將bool類(lèi)型進(jìn)行了宏定義,而_Bool類(lèi)型使微軟自己設(shè)計(jì)的一種類(lèi)型,在別的編譯器上不具有可移植性,故這里我們使用bool類(lèi)型。
接下來(lái)我們進(jìn)入我們的正題:
假設(shè)布爾變量名稱(chēng)為flag,那它與零值的比較在if語(yǔ)句中表示如下:
if(flag)? ? ? ? ? //表示flag為真
if(!flag)? ? ? ?//表示flag為假??
在C++標(biāo)準(zhǔn)中,布爾類(lèi)型常量和整數(shù)、指針之間的轉(zhuǎn)換規(guī)則為:
false->0 true->1
0->false true->非0值
但對(duì)于不同的實(shí)現(xiàn)對(duì)ture的表示也可以不同,所以我們要避免一下操作:
? int flag = 1; if(flag==ture){ ; } ?
因此以后在進(jìn)行bool類(lèi)型與零比較時(shí),我們避免使用判斷形式。
2.整形變量和零進(jìn)行比較
假設(shè)整形變量為ret,它與零值進(jìn)行比較的if語(yǔ)句可以表示為:
if(ret==0)? ?
if(ret!=0)
不可以寫(xiě)成bool的類(lèi)型風(fēng)格
if(ret)? ?//會(huì)讓人錯(cuò)以為ret使bool類(lèi)型
if(!ret)??
3.浮點(diǎn)變量和零值比較
這里也是我們今天所講述的重點(diǎn)。
這里我們先來(lái)看一段代碼:
在我們的看來(lái),x和y不應(yīng)該一樣嗎?為什么這里卻有如此大的差別?
這里涉及到了浮點(diǎn)數(shù)的存數(shù)和缺失。
讓我們?cè)诳匆欢未a:
?
在數(shù)學(xué)上我們認(rèn)為這兩個(gè)數(shù)使不相等的,但在32位計(jì)算器上認(rèn)為這兩個(gè)數(shù)是相等的。
所以我們?nèi)绻麅蓚€(gè)同符號(hào)的浮點(diǎn)數(shù)的差的絕對(duì)值在一個(gè)范圍內(nèi)我們就認(rèn)為這兩個(gè)數(shù)使相等的,否則激素不相等的。所以我們應(yīng)該怎樣去實(shí)現(xiàn)呢?
代碼如下:
我們引入了<math.h>和<float.h>兩個(gè)頭文件來(lái)實(shí)現(xiàn)我們的需求,這里我們引入了FLT_EPSILON?這個(gè)精度范圍來(lái)比較兩個(gè)float類(lèi)型的數(shù),除了這個(gè)精度范圍還有DBL_EPSILON精度范圍用來(lái)比較double類(lèi)型,這里我們就不舉例了。
4.指針和零值比較
指針變量的空為NULL,即不指向任何對(duì)象,盡管NULL和0值相同,但表達(dá)意義卻不同。
假設(shè)指針變量為p,它與零值比較的if語(yǔ)句實(shí)現(xiàn)為:
if(p==NULL)? ? ? ? //p與NULL比較,來(lái)顯示p使指針變量
if(p!=NULL)
?盡量避免寫(xiě)成如下形式
if(p)? ? ?//容易誤解成bool類(lèi)型變量
if(!p)
或者這種
if(p==0)? ?//容易誤解成整形類(lèi)型變量
if(p!=0)
這四類(lèi)比較希望大家有所收獲。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++開(kāi)發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化
這篇文章主要介紹了C++開(kāi)發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化方法的相關(guān)資料,需要的朋友可以參考下2015-07-07淺談C++中thread庫(kù)join和detach的區(qū)別
這篇文章主要為大家介紹了C++中thread庫(kù)join和detach的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11FFmpeg實(shí)現(xiàn)變速播放的兩種方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了FFmpeg中實(shí)現(xiàn)變速播放的兩種方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下2023-07-07C++對(duì)cin輸入字符的判斷及分段函數(shù)處理方法示例
這篇文章主要介紹了C++對(duì)cin輸入字符的判斷及分段函數(shù)處理方法,結(jié)合實(shí)例形式分析了C++輸入判斷及處理相關(guān)操作技巧,需要的朋友可以參考下2017-09-09C++位運(yùn)算符詳解(異或運(yùn)算符和移位運(yùn)算符)
下面小編就為大家?guī)?lái)一篇C++位運(yùn)算符詳解(異或運(yùn)算符和移位運(yùn)算符)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05C++實(shí)現(xiàn)小型復(fù)數(shù)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)小型復(fù)數(shù)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06