How does the bitwise operator XOR ('^') work?

Young picture Young · Apr 20, 2010 · Viewed 25k times · Source

I'm a little confused when I see the output of following code:

$x = "a";
$y = "b";
$x ^= $y;
$y ^= $x;
$x ^= $y;
echo $x; //Got b
echo $y; //Got a

How does the operator ^ work here?

Answer

Yacoby picture Yacoby · Apr 20, 2010

^ is the "exclusive or" bitwise operator. It reads in English as "either or". The result is 1 if and only if both bits differ:

1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0

Simplifying the example a bit so (and using Pseudo code):

$x = 0011 //binary
$y = 0010

$x = $x xor $y
//Result: x = 0001

//x = 0001
//y = 0010
$y = $y xor $x
//Result: y = 0011

//x = 0001
//y = 0011
$x = $x xor $y
//Result: x = 0010

All that PHP has done is treat the string "a" and "b" as their integer equivalents.