php使用異或xor調換兩個變數的值的原理
阿新 • • 發佈:2019-01-22
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; //A和B異或,結果是C
$b = $b ^ $c; //B和C異或的結果一定是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; //A和B異或,結果是C
$b = $b ^ $c; //B和C異或的結果一定是A,將A賦值給B
$a = $b ^ $c; //A(原A,現B)和C異或的結果一定是B,將B賦值給A
echo $a,$b; //已經實現$a和$b的值對調
5、a和b如果是字母,也可以:
$a = 'a'; //ASCII是97,二進位制是0110 0001
$b = 'b'; //ASCII是98,二進位制是0110 0010
$c = $a ^ $b; //A和B異或,結果是C
$b = $b ^ $c; //B和C異或的結果一定是A,將A賦值給B
$a = $b ^ $c ; //A(原A,現B)和C異或的結果一定是B,將B賦值給A
echo $a,$b; //已經實現$a和$b的值對調
能夠成功將兩個字串變數調換,原因就在於:兩個變數進行異或時,會將字串轉換成二進位制再進行異或,異或完,又從二進位制轉換成了字串。