1. 程式人生 > >php使用異或xor調換兩個變數的值的原理

php使用異或xor調換兩個變數的值的原理

1、首先,我們要知道什麼是異或,異或,簡單來說就是:相同的兩個數,異或的結果是0;不同的兩個數,異或的結果是1。
2、0和0,異或的結果是0。1和1,異或的結果是0。0和1,異或的結果是1。於是我們發現,在0和1的世界裡:A和B異或,結果是C;B和C異或的結果一定是A;A和C異或的結果一定是B。
3、寫成php:

$a = 0;
$b = 1;
$c = $a ^ $b; //AB異或,結果是C
$b = $b ^ $c; //BC異或的結果一定是A,將A賦值給B
$a = $b ^ $c; //A(原A,現B)和C異或的結果一定是B,將B賦值給A
echo $a,$b; //已經實現$a$b的值對調

4、a和b是二進位制的一位數,如此;是多位數,也是如此。
於是:

$a = 3; //0011
$b = 4; //0100
$c = $a ^ $b; //AB異或,結果是C
$b = $b ^ $c; //BC異或的結果一定是A,將A賦值給B
$a = $b ^ $c; //A(原A,現B)和C異或的結果一定是B,將B賦值給A
echo $a,$b; //已經實現$a$b的值對調

5、a和b如果是字母,也可以:

$a = 'a'; //ASCII97,二進位制是0110 0001
$b = 'b'; //ASCII98,二進位制是0110 0010
$c = $a ^ $b; //AB異或,結果是C
$b = $b ^ $c; //BC異或的結果一定是A,將A賦值給B
$a = $b ^ $c
; //A(原A,現B)和C異或的結果一定是B,將B賦值給A echo $a,$b; //已經實現$a$b的值對調

能夠成功將兩個字串變數調換,原因就在於:兩個變數進行異或時,會將字串轉換成二進位制再進行異或,異或完,又從二進位制轉換成了字串。