所以我無法弄清楚背後的邏輯這個if語句麻煩的邏輯非常簡單的if語句
int found = 0, value = 5;
if (!found || ‐‐value == 0)
cout << "danger ";
cout << "value = " << value << endl;
爲什麼「危險」寫到這裏的屏幕很簡單呢?我以爲自從找到= 0,!找到的不等於零。
所以我無法弄清楚背後的邏輯這個if語句麻煩的邏輯非常簡單的if語句
int found = 0, value = 5;
if (!found || ‐‐value == 0)
cout << "danger ";
cout << "value = " << value << endl;
爲什麼「危險」寫到這裏的屏幕很簡單呢?我以爲自從找到= 0,!找到的不等於零。
看來你正在考慮在if語句的條件通過以下方式
if ((!found == 0) || (‐‐value == 0))
然而,在C++中的if語句的條件相當於
if ((!found) || (‐‐value == 0))
,反過來相當於
if ((found == 0) || (‐‐value == 0))
因此,如果找到的確實等於0,那麼這個子表達式(found == 0)
就是真的,它是邏輯OR運算符的結果。
從我的腦海裏發瘋Vlad!非常感謝我的思考過程,非常感謝。真的很感激它。 – SuchARush
@SuchARush根本沒有。歡迎您。:) –
可以分解測試語句轉換成這是更接近編譯器做什麼邏輯:
if (!found || --value == 0)
{
cout << "danger";
}
是由編譯器的東西接近這個(擴展位爲例如邏輯理解,因爲大會實際上生成使用反向邏輯...)。
if (found == 0) // !found
{
cout << "danger"; // if this is executed, the next test is not !
}
else if (--value == 0)
{
cout << "danger";
}
編譯器使用反向邏輯,所以它並沒有產生兩倍的cout << "danger"
聲明。
爲:
if (found == 0)
{
goto print_danger;
}
else
{
-- value; // this statement is never executed if (found == 0)
if (value != 0)
{
goto skip_print_danger;
}
}
print_danger:
cout << "danger";
skip_print_danger:
cout << "value = " << value;
好的一面。謝謝 :) – SuchARush
因爲'found'不等於'0'(或'FALSE',我會說)。 – LogicStuff
答案在你的問題:「自找到= 0,!找到不等於零」,因此測試條件必須爲真。 –
這可能是短暫的cuircit混淆你?你會得到相同的'if(!found){cout <<「danger」; }'因爲如果第一個操作數是真的,第二個沒有被評估 – user463035818