必須知道的C語言知識(shí)細(xì)節(jié):|和||、&和&&區(qū)別

||和|,&和&&是初學(xué)者容易混淆的運(yùn)算符。

從運(yùn)算符種類來看,兩者是完全不同的運(yùn)算符。

||是邏輯運(yùn)算符,表示邏輯或;

&&是邏輯運(yùn)算符,表示邏輯與;

|是位運(yùn)算符,表示按位或;

&是位運(yùn)算符,表示按位與。

邏輯運(yùn)算符的優(yōu)先級比位運(yùn)算符優(yōu)先級低。

按位或運(yùn)算符|表示將兩個(gè)整數(shù)用二進(jìn)制表示后,按位進(jìn)行操作,只要有1位出現(xiàn)1則當(dāng)前位的值為1,每一位運(yùn)算取值有以下4種情況。

0|0=0 0|1=1 1|0=1 1|1=1

按位與運(yùn)算符&表示將兩個(gè)整數(shù)用二進(jìn)制表示后,按位進(jìn)行操作,只要有1位出現(xiàn)0則當(dāng)前位的值為0,每一位運(yùn)算取值有以下4種情況。

0&0=0 0&1=0 1&0=0 1&1=1

邏輯運(yùn)算符則是對判斷真假,C語言中沒有布爾類型true和false,使用0表示假,使用非0的值表示真,邏輯與&&表示兩個(gè)條件同時(shí)為真,結(jié)果為真,有四種取值情況:

0(假) && 0(假) = 0(假)

0(假) && 非0值(真) = 0(假)

非0值(真) && 0(假) = 0(假)

非0值(真) && 非0值(真) = 1(真)

邏輯或||表示兩個(gè)條件只要有一個(gè)為真,結(jié)果為真,有四種取值情況:

0(假) || 0(假) = 0(假)

0(假) || 非0值(真) = 1(真)

非0值(真) || 0(假) = 1(真)

非0值(真) || 非0值(真) = 1(真)

C語言條件語句中,例如if判斷,while判斷,for循環(huán)條件判斷中,使用A||B或A|B,A&&B或A&B,雖然某些情況條件判斷的結(jié)果是一樣的,不影響程序執(zhí)行。但是,兩者區(qū)別很大,混淆使用容易出錯(cuò):

1.邏輯運(yùn)算符和位運(yùn)算符是兩種類型運(yùn)算符,優(yōu)先級不一樣,位運(yùn)算符優(yōu)先級高;

2.邏輯表達(dá)式和位運(yùn)算表達(dá)式具體的表達(dá)式值不一樣,混用將導(dǎo)致出錯(cuò),例如:

0 | 2 = 2 // 條件判斷為真,但是值卻不一樣

0 || 2 = 1 // 條件判斷為真,但是值卻不一樣

1 & 2 = 0 // 條件判斷為假

1 && 2 = 1 // 此時(shí)條件判斷為真

3.if,while,for等條件判斷,必須使用邏輯運(yùn)算符,因?yàn)檫壿嬤\(yùn)算符,顧名思義,本來就是用來邏輯判斷,符合語義,提高代碼可讀性,避免出錯(cuò)。

4.C語言沒有布爾邏輯類型true和false,使用非0表示真,0值表示假,導(dǎo)致了邏輯判斷無法類型檢查,任何表達(dá)式值都可以作為邏輯判斷,當(dāng)出現(xiàn)混用時(shí),無法提示,因此務(wù)必小心。

備注:C99標(biāo)準(zhǔn),通過標(biāo)準(zhǔn)庫<stdbool.h>提供布爾類型_Bool和簡化使用的宏bool,明確true用1表示,false用0表示,該類型只能取0和1兩種值。

其實(shí)做為一個(gè)學(xué)習(xí)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這里我推薦一個(gè)C/C++基礎(chǔ)交流583650410,不管你是小白還是轉(zhuǎn)行人士歡迎入駐,大家一起交流成長。



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容