例如,如何获得137438953472 & 137438953472
的正确答案?
如果操作数介于2 ^ 32和2 ^ 53(max int)之间,则Javascript返回0。
答案 0 :(得分:8)
好的,这就是我想出来的,只用无符号整数测试< 2 ^ 53:
编辑:将部分结果解释为已签名
时发现错误function and( op1, op2 ) {
var mod = Math.pow( 2, 32 ),
op1mod = op1 % mod,
op2mod = op2 % mod,
op164to32,
op264to32,
res32, res64, res;
op1 -= op1mod;
op2 -= op2mod;
res32 = ( op1mod & op2mod ) >>> 0;
op164to32 = op1 / mod;
op264to32 = op2 / mod;
res64 = ( op164to32 & op264to32 ) >>> 0;
res = res64 * mod + res32;
return res;
}
and( 137438953473, 137438953473 )
//137438953473
and( 137439087606, 137438953473)
//137438953472
and( 0xCAFECAFECAFE, 0xBABEBABEBABE )
//152550976162494
使用Windows 64位计算器确认结果是正确的:P