You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何!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的实际执行顺序是:

  1. 先计算FALSE + !FALSE:!FALSE得到TRUE(即数值1),FALSE是0,所以0+1=1
  2. 再对结果1执行!运算——在R中,非0数值取逻辑非会得到FALSE,最终结果就是FALSE。
(!FALSE) + (!FALSE) # is 2

括号强制改变了运算顺序,先执行每个括号内的!FALSE得到TRUE(1),再相加1+1=2,符合预期。

!TRUE + !TRUE # is FALSE

同样遵循优先级规则:

  1. 先计算TRUE + !TRUE:!TRUE是FALSE(0),TRUE是1,所以1+0=1
  2. 对结果1取!得到FALSE。
(!TRUE) + (!TRUE) # is 0

括号先执行取反,得到两个FALSE(0),相加0+0=0,符合预期。

简单总结:如果要先执行逻辑非再做算术运算,必须用括号明确指定运算顺序,否则R会按照默认优先级先做加法再取反。

内容的提问来源于stack exchange,提问作者Dagremu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:05:08