Как сделать побитовое и число больше 2 ^ 32 в Javascript? Например, как получить правильный ответ на 137438953472 & 137438953472? Javascript возвращает 0, если операнды находятся между 2 ^ 32 и 2 ^ 53 (max int). Ответ 1 Хорошо, вот что я придумал, только проверенный с целыми целыми без знака < 2 ^ 53: edit: прибита ошибка, когда частичные результаты интерпретируются как подписанные 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 результаты подтверждены с помощью 64-битного калькулятора Windows: P
Ответ 1 Хорошо, вот что я придумал, только проверенный с целыми целыми без знака < 2 ^ 53: edit: прибита ошибка, когда частичные результаты интерпретируются как подписанные 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 результаты подтверждены с помощью 64-битного калькулятора Windows: P