PHP побитовое AND (&) возвращает отрицательное число Код: echo (5243960811416 & 4040906070209050); Попробуйте http://phptester.net/, и результат (справа) будет 20407554584 но на моем веб-хостинге он дает -1067281896. Есть ли способ обхода 20407554584? Это 32-битный лимит? Спасибо UPDATE/w SOLUTION Ответ 1 Решение После поиска и поиска я нашел this и переконвертировал в PHP function BitwiseAndLarge($val1, $val2) { $shift = 0; $result = 0; $mask = ~((~0) << 30); // Gives us a bit mask like 01111..1 (30 ones) $divisor = 1 << 30; // To work with the bit mask, we need to clear bits at a time while( ($val1 != 0) && ($val2 != 0) ) { $rs = ($mask & $val1) & ($mask & $val2); $val1 = floor($val1 / $divisor); // val1 >>> 30 $val2 = floor($val2 / $divisor); // val2 >>> 30 for($i = $shift++; $i--;) { $rs *= $divisor; // rs << 30 } $result += $rs; } return $result; } Использование echo BitwiseAndLarge(5243960811416 & 4040906070209050);
Ответ 1 Решение После поиска и поиска я нашел this и переконвертировал в PHP function BitwiseAndLarge($val1, $val2) { $shift = 0; $result = 0; $mask = ~((~0) << 30); // Gives us a bit mask like 01111..1 (30 ones) $divisor = 1 << 30; // To work with the bit mask, we need to clear bits at a time while( ($val1 != 0) && ($val2 != 0) ) { $rs = ($mask & $val1) & ($mask & $val2); $val1 = floor($val1 / $divisor); // val1 >>> 30 $val2 = floor($val2 / $divisor); // val2 >>> 30 for($i = $shift++; $i--;) { $rs *= $divisor; // rs << 30 } $result += $rs; } return $result; } Использование echo BitwiseAndLarge(5243960811416 & 4040906070209050);