Javascript и PHP Xor эквивалент

У меня есть код javascript:

var c = 267414715; var d = c ^ ("0x81BE16CD"); 

Результат -1907459466

http://jsfiddle.net/4N3JY/1/

Я хочу, похоже, получить эквивалент PHP:

 <?php $c=267414715; $d=$c ^ hexdec("0x81BE16CD"); echo "With hexdec: $d\n"; $d=$c ^ base_convert("0x81BE16CD", 16, 2); echo "With base_convert(2): $d\n"; $d=$c ^ base_convert("0x81BE16CD", 16, 10); echo "With base_convert(10): $d\n"; ?> 

Вывод:

 With hexdec: 2387507830 With base_convert(2): 9223372036587361092 With base_convert(10): 2387507830 

Может кто-то указать правильный эквивалентный код, а также объяснить, как разные версии (base_convert / hexdec / «правильный» эквивалент отличаются в их работе).

2387507830 == -1907459466 при использовании целых чисел без знака (посмотрите на значения битов наименее значимых бит)

2387507830 = 0000 0000 0000 0000 0000 0000 0000 0000 1000 1110 0100 1110 0111 1010 0111 0110 -1907459466 = 1111 1111 1111 1111 1111 1111 1111 1111 1000 1110 0100 1110 0111 1010 0111 0110

ваша проблема – переполнение 32 бит. Чтобы компенсировать, вы можете просто & 0xffffffff, который будет 0 из наиболее значимых 32 бит, и сделать оба ответа одинаковыми.