【问题标题】:Relational operator and the precedence of operators [closed]关系运算符和运算符的优先级
【发布时间】:2021-03-05 02:48:39
【问题描述】:

我用 C 语言执行了一段代码,但是我无法理解它的输出。

#include <stdio.h>

int main()
{
    int a=5;
    int b= ++a + 0!=0;
    printf("%d %d",++a, b);
    return 0;
}

上述程序的输出是

7 1

我无法理解为什么会这样。

【问题讨论】:

  • 查找operator precedenceb 值解析为 ((++a) + 0) != 0..
  • 当遇到这样的问题时,总是忽略间距。该代码中没有0!=0,但误导性的间距使它看起来像存在。 Another examplea --&gt; 0 真的是 a-- &gt; 0
  • 您是否尝试稍微更改一下代码以查看会发生什么?更改为b = 0!=0;b 现在0)或更改为b = (++a + 0) != 0;b 现在1)将揭示发生了什么

标签: c output operators addition


【解决方案1】:

操作顺序导致它被视为:

int b = (((++a) + 0) != 0);

因此:

int b = (6 != 0);

6 不是 0,因此它的值为 true aka 1。

int b = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2011-06-21
    • 2020-03-05
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多