我在書中遇到了一個問題,它要求我編寫以下程序的輸出。這個程序的邏輯是什麼?
#include<stdio.h>
int main()
{
int j=4;
(!j != 1 ? printf("\nWelcome") : printf("GooD Bye"));
return 0;
}
我基本上無法理解如何在運行該程序時打印歡迎詞。任何人都可以在操作符的層次結構的幫助下解釋,以及編譯器根據表達式計算什麼值?
我在書中遇到了一個問題,它要求我編寫以下程序的輸出。這個程序的邏輯是什麼?
#include<stdio.h>
int main()
{
int j=4;
(!j != 1 ? printf("\nWelcome") : printf("GooD Bye"));
return 0;
}
我基本上無法理解如何在運行該程序時打印歡迎詞。任何人都可以在操作符的層次結構的幫助下解釋,以及編譯器根據表達式計算什麼值?
線
(!j != 1 ? printf("\nWelcome") : printf("GooD Bye"));
相當於
if(!j != 1)
printf("\nWelcome);
else
printf("Good Bye");
這裏!j
評估爲0
因此條件!j != 1
將永遠是真實的,它會打印Welcome
。
感謝您以這種方式解釋它,我在比較部分中感到困惑:ko: –
我討厭成爲[REP CAPPED!](http:/ /meta.stackexchange.com/q/63327)Grrrrr .... – haccks
大聲笑,這不是問題,但是肯定我需要得到50個代表才能給其他人的問題添加評論-_- –
是啊混亂的C!
在c!j中計算結果爲0,因爲它是一個非0的數字,所以0!= 1是真的,在那裏執行三元操作的真實部分並打印「welcome」。
所以重新評估:
4 = 0 //或任何數量的
0 = 1
首先看與j !!!。 !!反轉TRUE/FALSE值。在這種情況下,TRUE是任何非零(4是),並且FALSE是0.因此,!j與!4相同,其值爲FALSE(或0)。 0!= 1的計算結果爲TRUE,所以執行速記的第一部分if/else,即「歡迎」部分。 –
邏輯NOT運算符!將把非零整數轉換爲零,並將零轉換爲某個非零(通常爲1),但如果彈出-1,則不會感到驚訝。這是Forth在標準化過程中面臨的一個窘境。是所有零位,全部一位還是單一位的邏輯非?我不認爲ANS Forth委員會能夠解決這個問題,而且在規範中沒有被定義(悲傷)。 –
@BrianTiffin - 所以我可能有時遇到一個情況,以及邏輯非運算符可能返回(-1)?看起來我不得不爲此添加一個案例,以及在使用邏輯NOT的一些程序中。 –