【问题标题】:What's the result of (i++&&j)?(i++&&j) 的结果是什么?
【发布时间】:2014-12-09 09:44:35
【问题描述】:

我在理解这个表达式时遇到了问题。

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

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

【问题讨论】:

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

标签: logic operators increment


【解决方案1】:

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

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

  1. (i++ && j) 首先被评估并计算为 4 && 4,结果为 4
  2. 计算后,i 将递增到 5
  3. 然后计算第二部分,即 4*5 = 20
  4. 然后添加它,因此 Javascript 为 24

关于 Javascript 布尔运算符的一些附加信息

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

因此:

  • 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】:

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

    这就是我认为它适合的方式。

    编辑

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-08-14
        • 2021-09-20
        • 2019-05-03
        • 1970-01-01
        • 2014-06-14
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多