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

为何~-(2 + "2")的运算结果为21?运算符运算逻辑咨询

解析表达式 ~-(2 + "2") 得到21的原理

嘿,这个问题挺有意思的!咱们一步步拆解这个表达式,你就能明白它为啥会得到21了——这本质是JavaScript里运算符优先级和隐式类型转换共同作用的结果,分三步来看:

第一步:计算最内层的 2 + "2"

JavaScript里的+运算符有两种作用:数字加法和字符串拼接。当操作数里有一个是字符串时,它会触发字符串拼接逻辑:把另一个操作数(这里的数字2)转换成字符串"2",然后和原字符串"2"拼接,结果就是 "22"。

第二步:计算 -("22")

接下来是一元负号运算符-,它的作用是将操作数转换成数值后取负。这里的操作数是字符串"22",JS会自动把它转换成数字22,再加上负号,结果就是 -22。

第三步:计算 ~(-22)

最后是按位非运算符~,这个运算符的规则可以用一个简单的公式概括:~x = -(x + 1)。咱们代入x=-22算一下:

~(-22) = -(-22 + 1) = -( -21 ) = 21

如果想从二进制补码的角度理解:在JS里数字是32位有符号整数,-22的补码取反后,对应的十进制数值就是21,和公式计算的结果一致。

总结运算顺序

整个表达式的执行优先级是:

  • 括号最高,先算2 + "2"得到"22"
  • 然后是一元负号-,将"22"转为-22
  • 最后是按位非~,得到最终结果21

内容的提问来源于stack exchange,提问作者dev-cc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:14:57