Muy interesante, acabo de hacer la prueba y efectivamente me da esos valores, es decir un valor diferente para PHP, pero creo que el problema es que el valor se sale del rango de los que acepta PHP, ya que haciendo esta prueba en mi server:
Código:
bash# perl -e 'printf "%d", 2 << 0xFACEB00C'
-> 8192
bash# php -r 'printf("%d", 2 << 0xFACEB00C);'
-> 8192
Da el mismo valor, hay que investigar porque sale de los valores.
Saludos.
Ah efectivamente ya vi la causa del problema, si haces: php -r "echo PHP_INT_MAX;", el máximo valor de PHP es 2147483647, el hex 0xFACEB00C es 4207849484, por lo que al pasarlo por PHP se vuelve un float, y al hacer el shift del float pues pasan cosas extrañas como lo indicado
Bueno solo para poner una posible solución es usar la librería
GMP de PHP, lamentablemente no tengo en mi equipo ese dll ni en mi server