【发布时间】:2015-09-28 16:49:04
【问题描述】:
我查看了 Stack Overflow 并没有找到答案。我有从0x0000000000000001 到0x0200000000000000, 的位掩码值,每个值都代表我的对象中可以修改的字段。修改后的字段将其对应的掩码值按位或运算在一起,以获得一个可以稍后解释的 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 = 0 和b = 0x80000000,我希望_bitwiseOr64 的结果是0x80000000(无符号,因为我在这里处理位掩码)。我没有得到那个结果。谁能提供帮助?
【问题讨论】:
-
问题是js只支持52位整数。那是因为 js 数字是双精度数,双精度数有 11 位指数和 52 位尾数(剩下的 1 位是符号位)。如果您需要表示一个 64 位数字,最好的办法是使用两个 32 位数字组成的数组。
-
看看
Uint32Array等类型化数组
标签: javascript bitwise-operators