如何在Javascript中按位和大于2 ^ 32的数字进行操作?

时间:2012-04-06 15:34:01

标签: javascript

例如,如何获得137438953472 & 137438953472的正确答案?

如果操作数介于2 ^ 32和2 ^ 53(max int)之间,则Javascript返回0。

1 个答案:

答案 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