int main()
{
int i = 10;
if (i ==20 || 30)
printf("true");
else
printf("false");
return 0;
}
輸出結果爲'真',爲什麼?c中以下代碼的輸出是什麼?爲什麼?
如果我們替換||與& &會發生什麼變化?
int main()
{
int i = 10;
if (i ==20 || 30)
printf("true");
else
printf("false");
return 0;
}
輸出結果爲'真',爲什麼?c中以下代碼的輸出是什麼?爲什麼?
如果我們替換||與& &會發生什麼變化?
因爲除0之外的每個值都爲真。在這種情況下,如果我說20是假的或30是真的,並且使整個陳述成真。如果你改變或者用an,那麼這個語句將是錯誤的。
30在邏輯上是正確的。任何非零值都是正確的。 OR表達式的計算結果爲true,因爲30在邏輯上爲真。
將OR更改爲AND將導致表達式變爲邏輯錯誤。
與任何語言之間的翻譯一樣,您不一定通過逐字替換來保留含義。
英語短語「x是y或z」傾向於在技術語言中翻譯爲更類似於「x是y或x是z」的東西或「x是包含y和z的集合的元素」。您要的是i == 20 || i == 30
。
你寫的表達式,i == 20 || 30
轉化爲「我是20,或者真」,這與「真」是一樣的。原因在於30
在此上下文中有效地轉換爲布爾值,並且由於30非零,它將轉換爲「true」。
你可能寫的第三個變體是i == (20 || 30)
,這相當於i == 1
(因爲20和30轉換爲真,然後真轉換回1)。
int i = 10;
if (i == 20 || 30)
的相當於
if ((i == 20) || 30)
所以第一測試如果否,第二,是非0,評估爲真。由於兩個評估中的一個是真實的,所以整個測試是真實的。
將||
替換爲&&
會發生什麼情況?
if ((i == 20) && 30)
這裏因爲兩個評估之一是錯誤的,整個測試是錯誤的。
您可能想看看C中的運算符優先級。 – EOF
用'&&'替換'||'時發生了什麼變化? –
https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcR6AXCu_I-ZkA1LxaK_a5LP-D69XBOlOPyhAx2XNgAvoeCefb4HRBq4dOFt –