C 語言中 != 和 ! 運算符實際運用上有什麼區別?! 運算符應該怎麼運用?

更高的層次來看,數據類型有好幾種,布爾值true false,數值,字元串什麼的,雖然底層都由 01表達,但是在編程概念上他們是不一樣的。有不一樣的意義,或者說語義,但是實際運用上我還是不知道怎麼進行!反取的運用


在 C99 之前,並沒有 bool, truefalse,都是用 int類型表示布爾值。 例如 3 &< 4 這個表達式的求值結果是 13 &> 4 這個表達式的求值結果是 0

但所有邏輯運算符(logical operator)中,其操作數(operand)都是以 非零 去判斷假和真的。例如,對一元的邏輯取反(negation)! 運算符而言:

printf("%d
", !0); // 1
printf("%d
", !1); // 0
printf("%d
", !2); // 0 (這個比較不直覺)
printf("%d
", !!2); // 1 (用!!可把任何數值強制變成 0 或 1)

!= 是比較運算符(comparison operator), 只比較左右兩個值是否不相等,求值出 01

在一般編程下,你可以用邏輯運算符(!, ||)來處理比較運算符的結果。

另外,還有一個相關的問題,C 語言有 ^ 表示逐位異或(bitwise XOR), 為什麼沒有邏輯異或?

答案是,對於操作數限於 01 的時候,!= 就是邏輯異或。如果需要判斷零與非零, 可寫成 !a != !b


「!=」不等於

「!」真假變反

舉例

if(a != 5),意思是「如果 a 不等於 5」

if( !b ),意思是「如果 b真假變反後等於真」


感謝大佬回答了


你是在問問題還是在展示自己學會了什麼?

初學者多看書少問這種自己都不知道有什麼意義的問題。


c99之前用0,1代表true,false;看來c++和php相比也沒有好到哪裡去么。。。

php現在都強制===來判斷同類型不轉換相等了。=== true判斷真。


c語言在判斷條件的時候,並不是在判斷對還是不對,而是在判斷零還是非零。

也就是說,== < >之類的符號和+ -是一樣的,都是運算符。把這個算式(可能包含如<的判等運算符)放在需要判斷是否的地方,程序就會根據這個算式的值是零還是非零執行相應的操作。

例如

while (1) {
//循環體
}

在這,小括弧里的值永遠為1,非零, 循環體將永遠執行。

又如

a = 0;
if (1 &< a &< 2) /***語句**/;

1 &< 0 得到結果0, 0 &< 2得到結果1, if中的判斷條件等於1, 語句將會被執行(雖然看上去不會)。


!是取反

!a 如果a等於零,則該式的結果為一;如果a非零,則該式結果為零。

!= 是不等於

a != b 如果a與b的值相同,則該式結果為0;如果a與b值不同,則該式結果為1。


在新版的C99標準中,C語言擁有了bool類型。這種類型只有兩種值,true 和 false, true是非零,false是零。在編程時,可以向int一樣聲明這個變數,true false會讓程序變得更加直觀。


!單目運算符,!=一個雙目運算符,題主題到了反取,又題到了字元串,所以我猜題主好奇的是能不能在字元串上干這個邏輯非運算,答案是不能啦

!就等於語文考試裡面的反義詞操作,!=是語文的「我們不一樣,我們到底是不是一樣!」

// 我好好奇為什麼這個會是今日最熱

// 既然最熱了,有興趣的小夥伴看看我的其他文章咯 手把手1小時打造智能家居-電燈控制,9.9元實現智能家居!,關注我還有其他小知識哦


推薦閱讀:

單片機編程最早是彙編,然後從彙編轉為c語言,那麼,c++會不會替代c語言來進行單片機編程 ?
為什麼C++選了Win32控制台應用程序之後頭文件必須用所給的那一個?
拉比克偷取他人技能,在代碼程序層面時如何實現的?
畫符的程序與要領
這段代碼為何能輸出"Hello World"?

TAG:編程 | C編程語言 | 程序 |