奇怪的C程序前缀增量行为与Javascript

meh*_*mpt 1 javascript c

我正在运行这个简单的代码片段:

#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);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的理解说,这m = ++i将停在这里,不会进一步评估i= m= = -1的值.但是,值m是1!

我在JavaScript中尝试了相同的代码,m这里的值是infact -1.C代码有什么问题?

在此输入图像描述

dbu*_*ush 8

在C中,||如果两个参数都计算为0 ,则逻辑OR运算符结果为0;如果任一参数计算为非零,则逻辑OR运算符结果为1.

在这种情况下,++i计算结果为-1,因此||不评估右侧,运算符结果为1.

Javascript以||不同的方式处理运算符.特别是,如果计算结果为true,则会产生左操作数,否则会产生右操作数.因此,您不能指望运算符在一种语言中以与在另一种语言中相同的方式工作.