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

JS与Dart中左移运算结果为何不同?如何在Dart中获同款结果?

让Dart实现与JavaScript一致的移位运算结果

JavaScript的位运算会将操作数转换为32位有符号整数进行计算,而Dart的int类型默认是64位有符号整数,这就是两者运算结果不同的核心原因。要让Dart得到和JavaScript相同的结果,只需手动模拟32位有符号整数的处理逻辑。

解决方法

使用Dart内置的toSigned(32)方法,将移位后的64位数值截断并转换为32位有符号整数:

void main() {
  int jsStyleResult = (255 << 24).toSigned(32);
  print(jsStyleResult); // 输出: -16777216
}

原理说明

  • 255 << 24在Dart中计算得到的64位数值是4278190080(对应十六进制0xFF000000)
  • toSigned(32)会将该数值按照32位有符号整数的规则处理:此时32位的最高位(第31位)是1,会被判定为负数,最终转换为对应的补码值-16777216,和JavaScript的运算结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:45:37