【问题标题】: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。
【问题讨论】:
标签:
logic
operators
increment
【解决方案1】:
我想这取决于语言(及其编译器)因为它取决于i 何时递增以及&& 布尔运算符如何工作或返回什么。
至少在 Javascript 中它是这样工作的:
-
(i++ && j) 首先被评估并计算为 4 && 4,结果为 4
- 计算后,
i 将递增到 5
- 然后计算第二部分,即 4*5 = 20
- 然后添加它,因此 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。问题解决了。谢谢大家的帮助。