例如,如何获得正确的答案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