Ben aşağıdaki kodun çıktısını görünce biraz kafam karıştı:
$x = "a";
$y = "b";
$x ^= $y;
$y ^= $x;
$x ^= $y;
echo $x; //got b
echo $y; //got a
Ve ben nasıl operatör ^? Netlikte açıklamalar duyacağız burada mı çalışıyor acaba!
Bu swapping a value using xor gibi görünüyor. Ben php (normalde ints veya bir şey için kullanabilirsiniz) olarak dizeleri hakkında emin değilim düşündüm. Yapabilirsiniz xor bir doğruluk tablosu için look here.
Hakkında ilginç xor bu yönlüdür olmasıdır: A xor B xor B == A ki ... and veya or ile çalışmıyor. Bundan dolayı bu iki değer değiş tokuş etmek için örnek olarak kullanılabilir:
$x ^= $y;
$y ^= $x;
$x ^= $y;
şu anlama gelir:
$x = $x ^ $y
$y = $y ^ ($x ^ $y) // = $x
$x = ($x ^ $y) ^ ($y ^ ($x ^ $y)) // = $y
^ "Özel veya" bit operatörüdür. Bu "ya da" İngilizce olarak okur. Her iki bit farklılık sadece ve sadece sonucu 1:
1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0
Biraz böylece örnek basitleştirilmesi (ve Sözde kodu kullanarak):
$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
Yapmış tüm PHP kendi tamsayı eşdeğerleri gibi dizesini "a" ve "b" tedavi olduğunu.
^ Operatör her değişkenin bit değerleri üzerinde bir XOR gerçekleştirir. XOR şunları yapar:
a = 1100
b = 1010
xor = 0110
x XOR işleminin sonucudur. Bitler eşit ise bunlar sonuç 1 farklı ise sonuç 0'dır.
Sizin örnekte ^ = XOR ve atama yapar ve iki değişkenleri $ x ve $ y arasındaki etrafında bit takas.
Devamı burada http://en.wikipedia.org/wiki/Xor_swap_algorithm