Logic 什么';(i&x2B;&x2B;&j)的结果是什么?

Logic 什么';(i&x2B;&x2B;&j)的结果是什么?,logic,operators,increment,Logic,Operators,Increment,我理解这个表达有问题 (i++&&j)+4*i=? // i=4, j=4 结果如何?程序给我25分。我假设在递增之前它实际上给了我21。当我在C中运行它时,我得到了21。(I++&&j)应该计算为1,因为&&是一个逻辑AND运算符。然后4*i,这里的i是5,因为它在最后一次使用评估后增加了,所以1+4*5=21 这正是我如何看待它的配合 编辑 基本上,它取决于所编写语言中的运算符优先级,因此结果不同。我认为它取决于语言(及其编译器),因为它取决于I何时递增,以及&布尔运算符

我理解这个表达有问题

(i++&&j)+4*i=? 
// i=4, j=4

结果如何?程序给我25分。我假设在递增之前它实际上给了我21。

当我在C中运行它时,我得到了21。
(I++&&j)
应该计算为1,因为
&&
是一个逻辑AND运算符。然后
4*i
,这里的i是5,因为它在最后一次使用评估后增加了,所以1+4*5=21

这正是我如何看待它的配合

编辑
基本上,它取决于所编写语言中的运算符优先级,因此结果不同。

我认为它取决于语言(及其编译器),因为它取决于
I
何时递增,以及
&
布尔运算符如何工作或返回什么

至少在Javascript中,它是这样工作的:

  • (i++&&j)
    首先计算为4&&4,结果为4
  • 计算此值后,
    i
    将递增为5
  • 然后计算第二部分,即4*5=20
  • 然后将其添加到Javascript中,结果为24
  • 关于Javascript布尔运算符的一些附加信息 这可能是因为Javascript不是强类型语言,但每个非零、非空、非空和定义的值都是真实的。最后一个truthy值将在计算boolen表达式后返回

    因此:

    • 4(truthy)和&4(truthy)
      将返回
      4
    • 4(truthy)和&0(false)
      将返回
      0
    • 0和&4
      将返回
      0
    • 10&&4
      将返回
      4
      -最后一个真实值
    • false&&4
      将返回
      false
    • 4&&null&&5
      将返回
      null
    • 4&&new Date()
      将返回特定时刻的日期
    • 等等

    我用C编译了它。当我只使用单printf来显示这个表达式时,它给了我21。虽然当我在printf中使用这个表达式“两次”时,它给了我25。问题解决了。谢谢大家的帮助。

    这是一个家庭作业/测试,不是吗?;)当我在CYes中运行它时,这给了我21,这是一个棘手的测试的一部分:p没有指定语言,就没有一个答案。