我对理解这个表达式有疑问。
(i++&&j)+4*i=?
// i=4, j=4
这是什么结果?程序给了我25.我假设在增加之前它实际上给了我21。
答案 0 :(得分:0)
当我在C中运行时,我得到21。(i++&&j)
应评估为1,因为&&
是逻辑AND运算符。然后4*i
,我在这里是5,因为它在评估最后一次使用后增加了,所以1 + 4 * 5 = 21。
这就是我认为它是如何组合在一起的。
基本上,它取决于编写语言的运算符优先级,因此会产生不同的结果。
答案 1 :(得分:0)
我认为这取决于语言(及其编译器)因为它取决于i
何时会增加,以及&&
布尔运算符如何工作或它返回的内容。
在Javascript中至少它的工作原理如下:
(i++ && j)
并计算为4&& 4导致4 i
正在增加到5 这可能是因为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。问题解决了。谢谢大家的帮助。