Дело в том, что в JS побитовые операции выполняются над 32-битными целыми числами со знаком, для которых максимальное положительное значение 2147483647. Что меньше, чем 2851871266. Соответственно, получается переполнение.
synapse_people, в смысле "сделать так же"? Какие действия произвести над указанным значением, чтобы получить тот же результат? Ну, можно инвертировать значение, выполнить побитовое И с максимальным JS-целым, и снова инвертировать:
$jsMaxInt = 2147483647; // кстати, 31 единица в двоичном представлении: 0b1111111111111111111111111111111
echo ~(~0xA9FC1A22 & $jsMaxInt); // -1443096030