c中以下代码的输出是什么?为什么?

时间:2016-05-30 18:25:25

标签: c

int main() 
{
    int i = 10;
    if (i ==20 || 30)
        printf("true");
    else
        printf("false");
    return 0;
}

输出是' True'为什么?

如果我们替换||与&&会发生什么变化?

4 个答案:

答案 0 :(得分:3)

与语言之间的任何翻译一样,您不必通过逐字替换来保留意义。

英语短语" x是y或z"倾向于在技术语言中翻译为类似于" x是y或x是z"或" x是包含y和z"。

的集合的元素

你想要的是i == 20 || i == 30

你写的表达式,i == 20 || 30转换为"我是20,或者是真的"这与" true"相同。原因是30在这种情况下有效地转换为布尔值,并且由于30非零,它转换为" true"。

您可能编写的第三个变体是i == (20 || 30),它等同于i == 1(因为20和30转换为true,然后true转换回1)。

答案 1 :(得分:2)

由于operator precedence条件

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

相当于

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

所以第一次测试是否为false,第二次测试为非0,则计算结果为true。由于两个评估中的一个是真的,整个测试都是正确的。

||替换为&&时会发生什么?

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

这里由于两个评估中的一个是错误的,整个测试都是错误的。

答案 2 :(得分:1)

因为0以外的每个值都是真的。在条件中它表示如果我等于20是假的或30是真的并使整个陈述成立。如果您更改或使用a,则语句将为false。

答案 3 :(得分:0)

30在逻辑上是正确的。任何非零值都是真的。 OR表达式的计算结果为true,因为30在逻辑上是真的。

将OR更改为AND会导致表达式逻辑错误。