This isn't a bug, both your answers are wrong.
The problem is that, on a 32-bit machine, it is impossible to represent the number -5799680607 (your value of $a) in binary, so a true xor() can't be performed. To test this, run the following code on each machine:
PHP Code:
<?php
echo decbin(-5799680607);
echo("\n");
?>
Each one may give you a different answer, but they're both wrong if you're on a 32 bit machine, because the correct answer is:
1111111111111111111111111111111010100110010011111110010110100001
See
http://en.wikipedia.org/wiki/Twos_complement for how negative numbers are represented in binary. So, here are the "correct" representations for your values of $a, $b, and the correct result, which is -5799843495:
1111111111111111111111111111111010100110010011111110010110100001
0000000000000000000000000000000000000000000000101000110011111000
1111111111111111111111111111111010100110010011010110100101011001
If you can keep your eyeballs in line, you will see that the bottom result is correct, with each bit the xor() of the above two. And if you run your test script on a 64-bit machine, you will get the correct result.
So I'm guessing they changed the way that PHP handles integers in an overflow condition, but it doesn't matter because neither is correct. So, what is it you're actually trying to achieve here? I'm guessing you're just trying to get some 3rd party code working the same between versions, instead of actually doing some sort of binary math?