C 語言中 != 和 ! 運算符實際運用上有什麼區別?! 運算符應該怎麼運用?
更高的層次來看,數據類型有好幾種,布爾值true false,數值,字元串什麼的,雖然底層都由 01表達,但是在編程概念上他們是不一樣的。有不一樣的意義,或者說語義,但是實際運用上我還是不知道怎麼進行!反取的運用
在 C99 之前,並沒有 bool
, true
和false
,都是用 int
類型表示布爾值。 例如 3 &< 4
這個表達式的求值結果是 1
,3 &> 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), 只比較左右兩個值是否不相等,求值出 0
或 1
。
在一般編程下,你可以用邏輯運算符(!
, 和
||
)來處理比較運算符的結果。
另外,還有一個相關的問題,C 語言有 ^
表示逐位異或(bitwise XOR), 為什麼沒有邏輯異或?
答案是,對於操作數限於 0
和 1
的時候,!=
就是邏輯異或。如果需要判斷零與非零, 可寫成 !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"?