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
相关产品推荐
相关产品推荐

