Эквивалент Xor для Javascript и PHP


У меня есть код 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 / "правильный" эквивалент отличаются по своей работе).

Author: WorkWise, 2014-06-11

1 answers

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 бит, и сделать оба ответа одинаковыми.

 1
Author: Zack Newsham, 2014-06-11 04:37:39