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

标签 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);
}

enter image description here

我的理解是 m =++i 将在这里停止并且不会进一步计算,因此 i 的值 = m 的值= -1。但是,m 的值为 1!

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

enter image description here

最佳答案

在 C 中,逻辑或运算符 || 如果两个参数的计算结果均为 0,则结​​果为 0,如果任一参数的计算结果为非零,则结果为 1。

在这种情况下,++i 的计算结果为 -1,因此 || 的右侧未计算,运算符的结果为 1。

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

关于javascript - 奇怪的 C 程序前缀增量行为与 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49139439/

相关文章:

javascript - 如何从 ASP.NET MVC View 包含 Add'l .js? (.aspx)

javascript - 使用 React 渲染多个图表

c - 如何正确地为数组(结构类型)元素赋值?

c - 在打印出首字母的 C 程序中不理解的行为

javascript - AmCharts 基于数据的动态列

javascript - AngularJS ng-repeat 用于动态子 json 数组

javascript - 在 Ajax Woocommerce 添加到购物车验证上显示甜蜜警报

c - 在 C 中传递一个指向字符串的指针

c - 如何在c中使用数组打开文件

c - 我真的需要malloc吗?