【问题标题】:Bitwise XOR two variables按位异或两个变量
【发布时间】:2014-03-31 23:48:05
【问题描述】:

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

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

为什么它给我'1001000111100000001100010001'而不是'11110110111000011111110011101110'?

【问题讨论】:

标签: php bitwise-xor


【解决方案1】:

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 和 bindec 开始的二进制字面量用于较旧的 PHP 版本。您示例中的数字被视为十进制(或八进制,如果它们以零开头)。

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

【讨论】:

  • 如果我写“01010^ 11011”我得到“10507”。
  • @Michael 您正在使用十进制/八进制数字。使用0b01010(PHP 5.4 起有效)或bindec 将其转换为十进制。
  • 10507 decbin = 10100100001011.issent 01010 ^ 11011 = 10011?
  • @Michael 我说的是bindec,而不是decbin,请参阅我对答案的编辑。
【解决方案2】:

这样

$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

【讨论】:

    猜你喜欢
    • 2014-08-14
    • 2016-03-23
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2022-01-17
    • 2015-11-15
    相关资源
    最近更新 更多