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。<=这里以什么方式工作?
这个说法
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。