(i ++&& j)的结果是什么?

时间:2014-12-09 09:44:35

标签: logic operators increment

我对理解这个表达式有疑问。

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

这是什么结果?程序给了我25.我假设在增加之前它实际上给了我21。

3 个答案:

答案 0 :(得分:0)

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

这就是我认为它是如何组合在一起的。

修改

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

答案 1 :(得分:0)

我认为这取决于语言(及其编译器)因为它取决于i何时会增加,以及&&布尔运算符如何工作或它返回的内容。

在Javascript中至少它的工作原理如下:

    首先评估
  1. (i++ && j)并计算为4&& 4导致4
  2. 计算完毕后,i正在增加到5
  3. 然后计算第二部分,即4 * 5 = 20
  4. 然后添加,因此Javascript因此 24
  5. 关于Javascript布尔运算符

    的一些其他信息

    这可能是因为Javascript不是强类型语言,但每个非零,非空,非空和定义的值都是真实的。在评估boolen表达式后,将返回最后一个真值

    因此:

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

答案 2 :(得分:0)

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