例如,如何得到正确答案137438953472 & 137438953472
?
如果操作数在 2^32 和 2^53(max int) 之间,Javascript 返回 0。
例如,如何得到正确答案137438953472 & 137438953472
?
如果操作数在 2^32 和 2^53(max int) 之间,Javascript 返回 0。
好的,这就是我想出的,仅使用 < 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