在代数表达式中如何使用关系运算符?

Anu*_*wal 0 c operator-precedence post-increment relational-operators

我遇到了一段代码,其中<=在 C 中的代数表达式中使用了 。

int x=2, y=4, z=5, m=10;
m+= x * y + z++ <=m+3;
printf("%d, %d", m,z);
Run Code Online (Sandbox Code Playgroud)

我从未见过以这种方式使用关系运算符,并且想知道如何计算其输出。运行时收到的输出是 11, 6。<=这里以什么方式工作?

Vla*_*cow 5

这个说法

m+= x * y + z++ <=m+3;
Run Code Online (Sandbox Code Playgroud)

可能会被重写为

m += (x * y + z++ ) <= ( m+3 );
Run Code Online (Sandbox Code Playgroud)

由于运算符的优先级。

考虑到这些声明

int x=2, y=4, z=5, m=10;
Run Code Online (Sandbox Code Playgroud)

(x * y + z++ ) 关系运算符的操作数<=等于即2 * 4 + 5等于13(注意后缀自增运算符的值是其操作数自增前的值),m + 3 也等于13。所以关系运算符产生1

事实上你有

m += 1;
Run Code Online (Sandbox Code Playgroud)

来自 C 标准(6.5.8 关系运算符)

6 如果指定的关系为 true,则每个运算符<(小于)、>(大于)、<=(小于或等于)和 >=(大于或等于)应产生 1,如果指定关系为 true,则每个运算符应产生 0为 false。107) 结果的类型为 int。

结果m将等于 ,11并且z由于该语句之后的后缀增量运算符将等于6