为何!FALSE + !FALSE结果不等于2?R语言运算符优先级解惑
为什么在R中
!FALSE + !FALSE的结果是FALSE而非2? 这是R语言运算符优先级规则导致的——算术运算符+的优先级高于逻辑非运算符!,所以R会先执行加法运算,再执行逻辑非运算,完全不是你预期的“先取反再相加”。
我们逐个拆解你的代码示例:
FALSE + FALSE # is 0
布尔值在算术运算中自动转换为数值:FALSE对应0,所以0+0=0,符合预期。
TRUE + TRUE # is 2
TRUE对应1,所以1+1=2,符合预期。
!FALSE + !FALSE # is FALSE
因为+优先级更高,R的实际执行顺序是:
- 先计算
FALSE + !FALSE:!FALSE得到TRUE(即数值1),FALSE是0,所以0+1=1 - 再对结果
1执行!运算——在R中,非0数值取逻辑非会得到FALSE,最终结果就是FALSE。
(!FALSE) + (!FALSE) # is 2
括号强制改变了运算顺序,先执行每个括号内的!FALSE得到TRUE(1),再相加1+1=2,符合预期。
!TRUE + !TRUE # is FALSE
同样遵循优先级规则:
- 先计算
TRUE + !TRUE:!TRUE是FALSE(0),TRUE是1,所以1+0=1 - 对结果
1取!得到FALSE。
(!TRUE) + (!TRUE) # is 0
括号先执行取反,得到两个FALSE(0),相加0+0=0,符合预期。
简单总结:如果要先执行逻辑非再做算术运算,必须用括号明确指定运算顺序,否则R会按照默认优先级先做加法再取反。
内容的提问来源于stack exchange,提问作者Dagremu
相关产品推荐
相关产品推荐

