例如,如何获得正确的答案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
Run Code Online (Sandbox Code Playgroud)
使用Windows 64位计算器确认结果是正确的:P
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |