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

以下代码在c中的输出是什么?为什么?,c,C,输出为“真”,为什么 如果我们将| |替换为&&会发生什么变化?因为除0以外的所有值都是真的。在这个条件下,它说如果我等于20,那是假的,如果我等于30,那是真的,这使得整个陈述都是真的。如果用and更改or,则该语句将为false。30在逻辑上为true。任何非零值都为真。OR表达式的计算结果为true,因为30在逻辑上为true 将或更改为,会导致表达式在逻辑上错误。与任何语言之间的翻译一样,您不必通过逐字替换来保留含义 英语短语“x是y或z”倾向于在技术语言中翻译为更类似于“x是y或x是z

输出为“真”,为什么


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

因为除0以外的所有值都是真的。在这个条件下,它说如果我等于20,那是假的,如果我等于30,那是真的,这使得整个陈述都是真的。如果用and更改or,则该语句将为false。

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


将或更改为,会导致表达式在逻辑上错误。

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

英语短语“x是y或z”倾向于在技术语言中翻译为更类似于“x是y或x是z”或“x是包含y和z的集合的元素”

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

你写的表达式,
i==20 | | 30
翻译成“i是20,或真”,这与“真”是一样的。原因是在这个上下文中,
30
有效地被转换为布尔值,并且由于30是非零的,所以它转换为“true”

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

因为条件不同

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

int i = 10;
if (i == 20 || 30)
因此,如果第一个测试为false,第二个测试为非0,则计算结果为true。因为两个评估中有一个是正确的,所以整个测试都是正确的

&&
替换
|
时会发生什么情况

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

此处,由于两个求值中的一个为假,因此整个测试为假。

您可能需要查看C中的运算符优先级。将
|
替换为
&&
时发生了什么变化?相关:
if ((i == 20) && 30)