我正在运行这个简单的代码片段:
#include<stdio.h>
int main() {
/*m = -1
i = -1
j = 3
k = 0*/
int i = -2, j = 3, k=0, m=0;
m = ++i || (++j && ++k);
printf("%d, %d, %d, %d", i, j, k, m);
}
我的理解是 m =++i
将在这里停止并且不会进一步计算,因此 i
的值 = m
的值= -1。但是,m
的值为 1!
我在 JavaScript 中尝试了相同的代码,这里 m
的值实际上是 -1。 C代码有什么问题?
最佳答案
在 C 中,逻辑或运算符 ||
如果两个参数的计算结果均为 0,则结果为 0,如果任一参数的计算结果为非零,则结果为 1。
在这种情况下,++i
的计算结果为 -1,因此 ||
的右侧未计算,运算符的结果为 1。
Javascript 以不同的方式处理 ||
运算符。特别是,如果它的计算结果为真,它会产生左操作数,否则会产生右操作数。因此,您不能期望运算符(operator)在一种语言中的工作方式与在另一种语言中的工作方式相同。
关于javascript - 奇怪的 C 程序前缀增量行为与 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49139439/