首先,采用php的list數據結構。上代碼,然后再解析
- function swap(&$a, &$b) {
- list ( $a, $b ) = array ($b, $a );
- }
list:把數組中的值賦值給list中的變量,相當於把$b的值賦值給$a,把$a的值賦值給$b.同時,注意&引用運算符的使用,這里是引用傳遞而不是值傳遞。
異或運算
按位異或的三個特點:
- 0^1=1 0^0=0 =>因此,0異或任何數等於任何數本身
- 1^0=1 1^1=0 =>因此,1異或任何數等於任何數取反
- 任何數異或自己=>把自己置0
好的,話不多說,上代碼
- function swap1(&$a, &$b){
- $a = $a ^ $b;
- $b = $a ^ $b;
- $a = $b ^ $a;
- }
好的,分析一下,為什么這樣也能實現交換。
$a = $a ^ $b;
$b = $a ^ $b = ($a ^ $b) ^ $b = $a ^ ($b ^ $b) = $a ^ 0,根據異或特點,0與任何數異或等於任何數本身。同理可推導,$a=$b