在Javascript中,我如何做一个按位和大于2 ^ 32的数字?

前端之家收集整理的这篇文章主要介绍了在Javascript中,我如何做一个按位和大于2 ^ 32的数字?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,如何获得正确的答案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

猜你在找的JavaScript相关文章