C++ bitwise Xor (exclusive or operator) operatörü ^ , diğer bit operatörleri gibi dijital elektronik xor yapısıyla aynıdır. Doğruluk tablosunu yine görselde paylaşalım :
kodlarken de aynı değişkenleri kullanalım:
int main() { int a = 7; //0111 int b = 13; //1101 int aXORb = a ^ b; //1010 cout << "a= " << a << ", b=" << b << ", a^b=" << aXORb; }
çıktımız : a= 7, b=13, a^b=10
10 elde ettik, binary formatındaki sayıları alt alta yazarak soldan sağa doğru sütunları XOR işlemine tabi tutuyoruz en solda: 0 ^ 1 den 1 geldi, bir sonrakinden 1 ^ 1 den 0 geldi, bir sonrakinden : 1 ^ 0 dan 1 geldi, bir sonrakinden 1 ^ 1 den 0 geldi. Benim xor anlatırken akılda kalması için anlattığım bir hikaye var, patron sekreterine bana yalnızca bir kişi çağır demiştir. Kimse gelmezse patron bu işi sevmez. Ahmet gelirse patron için tamamdır, Mehmet gelirse de patron için tamamdır, İkisi de gelirse patron bunu sevmez, bana bir kişi lazım der. A ya da B önemi yok ama mutlaka biri lazımdır.
Hatırlatmış olayım : bu operatör bir değişkene eşitlenmediği sürece bir değişikliğe yol açmaz, ne demeye çalışıyorum şöyle örneklendirelim :
int main() { int a = 7; a ^ 5; cout << "a= " << a; }
Bu kod ile a değişkeni hala 7 değerindedir, a yı 5 ile Xor işlemine tabi tutup a 'nın değerine eşitlersek :
a = a ^ 5; ya da kısaca a ^ = 5; dersek, a yı 5 ile xor işlemine tabi tutup oluşan değeri a ya atamış oluruz.
Haydi bir deneme de size, finalde ne yaptığını anlayanları sonuçlarla birlikte yorumlara bekliyoruz:
int main() { int x = 5; int y = 7; x = x ^ y; y = x ^ y; x = x ^ y; cout << x << " " << y << endl; }
Son bir bilgi verip konuyla vedalaşıyorum : a ^ b şu şekilde de elde edilebilir -> ~(a&b)&(a|b); bu karmaşık oldu ya, a ^ b candır :)
Şimdilik herkese kolay gelsin!
Önceki konu : Bit İşlemleri | Bitwise OR
Sonraki konu : C++ Bitwise And "ve" operatörü &