【问题标题】:How is i==(20||10) evaluated?如何评估 i==(20||10)?
【发布时间】:2016-01-29 07:20:18
【问题描述】:
#include <stdio.h>
int main(void)
{
   int i=10;
   if(i==(20||10))
       printf("True");
   else
       printf("False");
   return 0;
}

这给出了输出 False

请解释一下这个程序是如何工作的?

【问题讨论】:

  • if(i==(20||10)) 不会像您预期的那样工作
  • 你觉得10 == 1

标签: c logical-operators


【解决方案1】:

这条线if(i==(20||10)) 总是计算为i==1,正如在cmets 中所说的Alk - (20||10) 计算为1,因此当你比较i == 1 时,这就是你得到False 作为输出的原因. C 中的非零值表示为真。

了解Short-circuit evaluation

也许这就是你想要的:

int i=10;
if(i==20 || i == 10)
    printf("True");
else
    printf("False");

【讨论】:

  • OP 的问题也不是布尔短路问题。
  • @alk - 你不认为在表达式 20||10 中 - 表达式 10 根本不需要计算吗?
  • 可以,但这对结果没有影响。
【解决方案2】:

看看if(i==(20||10))。由于内括号,首先评估20||10,产生1。然后,变量i(其值为10)与1 进行比较,得到0

在 C 中,0 代表 False,而所有非零值都表示 True。所以条件变成了False。因此,打印“False”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多