2016-05-30 100 views
-6
int main() 
{ 
    int i = 10; 
    if (i ==20 || 30) 
     printf("true"); 
    else 
     printf("false"); 
    return 0; 
} 

輸出結果爲'真',爲什麼?c中以下代碼的輸出是什麼?爲什麼?

如果我們替換||與& &會發生什麼變化?

+4

您可能想看看C中的運算符優先級。 – EOF

+1

用'&&'替換'||'時發生了什麼變化? –

+0

https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcR6AXCu_I-ZkA1LxaK_a5LP-D69XBOlOPyhAx2XNgAvoeCefb4HRBq4dOFt –

回答

1

因爲除0之外的每個值都爲真。在這種情況下,如果我說20是假的或30是真的,並且使整個陳述成真。如果你改變或者用an,那麼這個語句將是錯誤的。

0

30在邏輯上是正確的。任何非零值都是正確的。 OR表達式的計算結果爲true,因爲30在邏輯上爲真。

將OR更改爲AND將導致表達式變爲邏輯錯誤。

3

與任何語言之間的翻譯一樣,您不一定通過逐字替換來保留含義。

英語短語「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)。

2

由於operator precedence條件

int i = 10; 
if (i == 20 || 30) 

的相當於

if ((i == 20) || 30) 

所以第一測試如果否,第二,是非0,評估爲真。由於兩個評估中的一個是真實的,所以整個測試是真實的。

||替換爲&&會發生什麼情況?

if ((i == 20) && 30) 

這裏因爲兩個評估之一是錯誤的,整個測試是錯誤的。