Потому что в таком случае имеет место undefinded behavior.Почему вообще разные результаты ?
The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers.
Все (с) [m]types.integer[/m]If you specify a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, if you perform an operation that results in a number beyond the bounds of the integer type, a float will be returned instead.
printf('%1$d/%1$08x ^ %2$d/%2$08x = %3$d/%3$08x', (int)-4738698913, (int)43814, (int)-4738698913^(int)43814);
-443731617/e58d315f ^ 43814/0000ab26 = -443704711/e58d9a79