以下代码在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)