【问题标题】:C if statement comparing two integer variables to the same constant [duplicate]C if语句将两个整数变量与相同的常量进行比较
【发布时间】:2016-10-03 18:14:52
【问题描述】:

我正在尝试将两个整数变量与同一个常量进行比较。显然在这种情况下,两个变量都具有相同的默认值。我试图像这样简化比较语句:

if (po->app_tag == po->inst_id == 0)
   return 1;

没用。

我不得不这样编码:

if ((po->app_tag == 0) && (po->inst_id == 0))
   return 1;

让它发挥作用。谁能给我解释一下两者的区别?不知何故,我觉得 C 编译器在比较两个整数变量时应该提供这种语法。我要求它可能是错误的.. :),但想了解一个原因.. 为什么我在这里错了。

【问题讨论】:

  • 你知道表达式a == b可以返回哪些值吗?
  • 当您将一个变量与另一个比较的结果进行比较时,您将它与 0 或 1 进行比较,这可能不是您想要的:stackoverflow.com/questions/18097922/…
  • @EugeneSh。是的..犯了一个基本的错误......
  • @ChintanShah Woah...你反应很快...
  • 这次更快..:P

标签: c if-statement integer constants comparison-operators


【解决方案1】:

由于== 运算符的关联性(它从左到右关联),

po->app_tag == po->inst_id == 0

被解释为:

(po->app_tag == po->inst_id) == 0

这就是语言的定义方式。

使用

(po->app_tag == 0) && (po->inst_id == 0)

通过独立评估 po->app_tag == 0po->inst_id == 0 并在这两者之间执行布尔 AND 来解决该问题。

有关运算符优先级和关联性的更多信息,请参阅http://en.cppreference.com/w/c/language/operator_precedence

【讨论】:

  • 感谢详细解释..!!
【解决方案2】:

po->app_tag == po->inst_id == 0 将被解释为(po->app_tag == po->inst_id) == 0 - 也就是说,与0 比较的东西不是单独的两个变量,而是po->app_tag == po->inst_id 的结果。如果两个值相等,该操作将返回 1,如果不相等,则返回 0。实际上,po->app_tag == po->inst_id == 0 等价于 po->app_tag != po->inst_id,这不是您想要的。

【讨论】:

  • 感谢详细解释..!!
【解决方案3】:

这就是 C/C++ 编译器的工作方式。比较表达式只能比较两个变量。如果您想要更多,则需要使用逻辑 AND (&&) 或 OR (||) 表达式。如果您想将一个变量与两个以上的 const 值进行比较,您可以使用 switch 语句。

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 2013-11-10
    • 2021-05-06
    • 2019-12-26
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2020-10-15
    • 2018-03-29
    相关资源
    最近更新 更多