按位XOR两个变量

时间:2014-03-26 22:08:39

标签: php bitwise-xor

我有两个变量:$a$b,我想得到它们的XOR。

$a = bindec('00110111001010000011101000111010');
$b = bindec('00111110001101100011100100101011');          
          //(11110110111000011111110011101110) <---This is what I want  
$c = $a ^ $b;
echo $c = decbin($c);

为什么它会给我&#39; 1001000111100000001100010001&#39;而不是&#39; 11110110111000011111110011101110&#39;?

2 个答案:

答案 0 :(得分:1)

xor是布尔值XOR。对bitwise XOR使用^

php> true xor false;
bool(true)
php> true xor true;
bool(false)
php> 5^8;
int(13)
php> 5 xor 8;
bool(false)

从PHP 5.4开始,您可以使用二进制文字,对于较旧的PHP版本,您可以使用bindec。您的示例中的数字被视为十进制(如果它们以零开头,则为八进制)。

php> 0b101010;
int(42)
php> bindec('101010');
int(42)

答案 1 :(得分:1)

喜欢这个

$c=$a ^ $b

这是文档http://www.php.net/manual/en/language.operators.bitwise.php

如果您想使用像您发布的二进制数字,请在其前面加上“0b”。否则它们被解释为小数。这仅适用于PHP 5.4及以上版本(What's the prefix for binary in PHP?

$a = 0b01010
$b = 0b11011