2015-07-10 216 views
3

我已经看了Stack Overflow,并没有完全找到答案。我有位掩码值从0x00000000000000010x0200000000000000,,每个代表我的对象中可以修改的字段。修改后的字段将其相应的掩码值按位“或”运算在一起,以便具有可稍后解释的单个64位值。但我有困难,因为Javascript按位运算符将操作数转换为32位有符号值。我试图编写无符号的64位无符号方法来模仿按位OR和按位AND,但遇到了困难。我的第一个尝试是:无符号64位按位与/或在Javascript中

_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(未签名,因为我处理位掩码这里)。我没有得到那个结果。谁能提供帮助?

+0

的问题是,js的只支持52个整数。这是因为js数字是双打和双打有11位指数和52位尾数(其余1位是符号位)。如果您需要表示一个64位数字,您可以做的最好的方法是使用两个32位数字的数组。 – slebetman

+0

查看类型数组,如['Uint32Array'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array) – Bergi

回答