爲什麼printf()
在這種情況下不會調用?在這種情況下我們可以使用&&
還是什麼?爲什麼我的文字不能打印?
{
int zz1,zz2;
zz1 = 8;
zz2= zz1/2;
if ((zz1==! 0) && (zz2 ==! 1)){
printf("!!!!!!!!!!");
}
}
爲什麼printf()
在這種情況下不會調用?在這種情況下我們可以使用&&
還是什麼?爲什麼我的文字不能打印?
{
int zz1,zz2;
zz1 = 8;
zz2= zz1/2;
if ((zz1==! 0) && (zz2 ==! 1)){
printf("!!!!!!!!!!");
}
}
我想你會寫(zz1 != 0) && (zz2 != 1)
。
其實(zz1 == !0) && (zz2 == !1)
是一個有效的語法,但在這種情況下,因爲你正在編寫產生事與願違的結果:
zz1 equals to (not)0 AND zz2 equals to (not)1
zz1 equals to 1 AND zz2 equals to 0
printf
不叫也許你想寫(zz1 != 0) && (zz2 != 1)
?
==!
不是一個操作符,而是其實際解析爲兩個運算符==
和!
,因爲編譯器總是選擇最長的令牌。而zz1==!0
實際上是zz1 == !0
。
注:!0
是邏輯NOT零是:==> 1.
的代碼,如果條件爲:
zz1 == !0
==>zz1 == 1
==> 8 == 1 ==>False
or 0
0
&&
any expression
==>False
(根據short-circuit evaluation)。如果在else子句中添加printf,那麼它將執行。檢查@ideone。
此外,假設如果更換由||
&&
即使再printf()函數將不會在你的代碼中調用,因爲zz2 = 4
和zz2 ==! 1
==>zz2 == !1
==>zz2 == 0
==>4 == 0
= => 0.
和0 || 0 == 0
所以如果條件將是錯誤的。
從句法上看,你的代碼是正確的。
zz1 ==! 0 //This is syntactically correct and evaluates to 0, zz1 has the value 4
//4 == 1 evaluates to false ==> 0
它評估爲0,因爲你是比較ZZ1到(!0)。 !0的計算結果爲1.同樣,!1的計算結果爲0.這不是按位的NOT操作。這是合乎邏輯的。
!9 == !1 == 0.
要執行按位NOT操作,請改用'〜'標記。
~1 == -2
~0 == -1
C中'不等於'的運算符是'!='。要使您的代碼正常工作,請更改==!到!=
操作& &執行邏輯與操作。
在一段代碼
(zz1 != 0) && (zz2 != 1)
第一條件表達式被選中。當且僅當它爲真時,纔會檢查下一個條件表達式。 如果第一個表達式(zz1!= 0)爲假,則整個表達式的值將減少爲0.
檢查您的語法'(zz1 ==!0)'您從哪種編程語言中獲得? – karthikr
@karthikr是'== ZZ 1!0' =>'== ZZ 1!0' **?** –
Ç,,,,,,,,,,,,,, – user2570509