【问题标题】:Unsigned 64-bit bitwise AND/OR in JavascriptJavascript中的无符号64位按位与/或
【发布时间】:2015-09-28 16:49:04
【问题描述】:

我查看了 Stack Overflow 并没有找到答案。我有从0x00000000000000010x0200000000000000, 的位掩码值,每个值都代表我的对象中可以修改的字段。修改后的字段将其对应的掩码值按位或运算在一起,以获得一个可以稍后解释的 64 位值。但是我遇到了困难,因为 Javascript 位运算符将操作数转换为 32 位有符号值。我尝试编写无符号的 64 位无符号方法来模拟按位或和按位与,但遇到了困难。我的第一个刺是:

    _bitwiseOr64: function(a, b) {
         var aHi = (a >> 32);
         var aLo = (a & 0xffffffff);
         var bHi = (b >> 32);
         var bLo = (b & 0xffffffff);
         return (((aHi | bHi) << 32) + (aLo | bLo));
    }

如果a = 0b = 0x80000000,我希望_bitwiseOr64 的结果是0x80000000(无符号,因为我在这里处理位掩码)。我没有得到那个结果。谁能提供帮助?

【问题讨论】:

  • 问题是js只支持52位整数。那是因为 js 数字是双精度数,双精度数有 11 位指数和 52 位尾数(剩下的 1 位是符号位)。如果您需要表示一个 64 位数字,最好的办法是使用两个 32 位数字组成的数组。
  • 看看Uint32Array等类型化数组

标签: javascript bitwise-operators


【解决方案1】:

看看这个库:http://google.github.io/closure-library/api/class_goog_math_Long.html

它们具有多种按位功能,例如 add(other) 和 or(other) 也支持 64 位。

对于 Node.JS,你可以使用Long.js

【讨论】:

  • 如果这回答了您的问题,请接受它作为答案。
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2011-11-10
  • 2011-02-28
  • 1970-01-01
  • 2016-10-20
  • 2018-11-05
  • 2012-02-11
相关资源
最近更新 更多