C#'ta İkili XOR Operatörünü Anlama
[[academy-video-youtube({"vid": "h4W3ywVWns", "start_time": "0", "title": "C#'ta İkilik: Binary XOR Operatörü 10 dakika veya daha kısa sürede", "creator": "Tim Corey", "length": "5m 54s"})]]
İkili işlemler, programlamanın önemli bir parçasıdır, özellikle düşük seviyeli optimizasyonlar ve bit düzeyinde manipülasyonlarla uğraşırken. Bu tür işlemlerden biri "exclusive OR" (XOR) operatörüdür. Bu makalede, Tim Corey'nin "10 Dakikada veya Daha Kısa Sürede İkili XOR Operatörü." videosunu takip ederek C#'ın İkili XOR operatörünü inceleyeceğiz.
Tim'in videosu, XOR'un yapısı, sözdizimi ve pratik uygulamaları hakkında mükemmel bir analizdir. Aşağıda, kolay referans için belirli zaman damgalarına atıfta bulunarak açıklamalarını ve örneklerini analiz edeceğiz.
XOR'a Giriş
Tim, videoya, bunun C#'ta İkiliyi Anlama serisinin bir parçası ve özellikle dokuzuncu ders olduğunu belirterek başlar. Bu oturumda, özel VEYA (XOR) operatörünün nasıl çalıştığını ve çeşitli senaryolarda nasıl faydalı olabileceğini öğreteceğini anlatarak sahneyi hazırlar.
XOR Operatörü Söz Dizimi ve Temel Açıklama
Tim, iki değeri tanıtır: 1 ve 2, ve bunları referans olması için konsola yazdırır. 32 bitlik temsili kaldırarak odak noktasını standart 8 bitlik ikili temsilde tutuyor.
0:31'de, C# dilinde XOR'un şapka sembolü (^) ile temsil edildiğini açıklıyor. O, izleyicilere şunları hatırlatıyor:
- AND operatörü (&) hem bitin 1 olmasını gerektirir ki 1 döndürebilsin.
- OR operatörü (|) bitlerden en az birisi 1 ise 1 döndürür.
- XOR operatörü (^) yalnızca iki bitten biri 1 olduğunda, fakat her ikisi de 1 olmadığında 1 döndürür.
Tim, her bit karşılaştırması için kuralı daha fazla açıklar:
- 1 XOR 0 = 1 0 XOR 1 = 1 1 XOR 1 = 0
- 0 XOR 0 = 0
Bu demektir ki XOR, iki değer arasında bir fark algılayıcı gibi çalışır.
C# Kodunda XOR'u Gösterme
Tim, iki değeri XOR'layarak elde edilen sonucu tutan bir uint değişkeni tanımlayarak pratik bir örneğe geçiyor:
// Define two sample values
uint val1 = 0b0001; // 1 in decimal
uint val2 = 0b0010; // 2 in decimal
// Perform XOR operation between val1 and val2
uint result = val1 ^ val2;
// Print the resultant binary value of XOR operation
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));// Define two sample values
uint val1 = 0b0001; // 1 in decimal
uint val2 = 0b0010; // 2 in decimal
// Perform XOR operation between val1 and val2
uint result = val1 ^ val2;
// Print the resultant binary value of XOR operation
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));Ardından sonucu konsola yazdırır ve çıktıyı not eder:
0000 0011Bu çıktı, XOR'un yalnızca orijinal değerlerden birinin 1 olduğu ancak her ikisinin de 1 olmadığı durumlarda bitleri koruduğunu vurgular.
Değer Karşılaştırması için XOR Kullanımı
Tim şimdi XOR'un pratik bir kullanımını gösteriyor: iki değerin aynı olup olmadığını kontrol etmek.
Saat 3:00'te, val1 ve val2'ün tamamen aynı olması için değerleri değiştiriyor:
// Initialize val1 and val2 to the same value
uint val1 = 0b10011001;
uint val2 = 0b10011001;
// Perform XOR operation to check for identical values
uint result = val1 ^ val2;
// Output will be zero if both values are identical
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));// Initialize val1 and val2 to the same value
uint val1 = 0b10011001;
uint val2 = 0b10011001;
// Perform XOR operation to check for identical values
uint result = val1 ^ val2;
// Output will be zero if both values are identical
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));XOR işlemini yürüttüğünde sonuç şöyle olur:
0000 0000Tim, bir XOR sonucunun 0 olması durumunda değerlerin aynı olduğunu açıklar. Bu, XOR'u iki sayıyı eşitlik açısından karşılaştırmak için hızlı bir yol yapar.
Farklılıkları Belirlemek İçin XOR
Saat 4:00'te, Tim, val1 ve val2 arasında hafif farklar olan başka bir durumu gösteriyor. Bu sefer, XOR sıfırdan farklı bir sonuç üretir, bu da değerler arasında bir fark olduğunu gösterir.
Bu yaklaşım, büyük ikili değerleri verimli bir şekilde karşılaştırırken kullanışlıdır çünkü XOR, farkları sadece bir adımda ortaya çıkarabilir.
Geçici Değişken Olmadan İki Değişkeni Değiştirmek için XOR
Tim, geçici bir değişken kullanmadan iki sayıyı değiştirme konusunda klasik bir programlama hilesini sunar.
Saat 5:40'ta, izleyicilere ekstra bir değişken ilan etmeden val1 ve val2'yi değiştirmeleri için meydan okuyor. Çözüm, XOR'u üç kez kullanır:
// Original values
uint val1 = 0b0010; // 2 in decimal
uint val2 = 0b0100; // 4 in decimal
// Swap the values using XOR
val1 = val1 ^ val2;
val2 = val1 ^ val2;
val1 = val1 ^ val2;
// After swap: val1 = 4, val2 = 2
Console.WriteLine($"val1: {val1}, val2: {val2}");// Original values
uint val1 = 0b0010; // 2 in decimal
uint val2 = 0b0100; // 4 in decimal
// Swap the values using XOR
val1 = val1 ^ val2;
val2 = val1 ^ val2;
val1 = val1 ^ val2;
// After swap: val1 = 4, val2 = 2
Console.WriteLine($"val1: {val1}, val2: {val2}");Süreci adım adım anlatıyor:
val1,val1 ^ val2'yi saklar, bu da artık her iki değerin bir karışımını tuttuğu anlamına gelir.val2, tekrarval1ile XOR'lanarak güncellenir, sadece orijinalval1değerini bırakır.val1tekrar XOR'lanır, sadece orijinalval2değerini bırakır.
Saat 7:30'da, Tim değiştirilen değerleri yazdırır ve val1 ve val2'un başarıyla değerlerini değiştirdiğini teyit eder.
İkili Temsilde XOR'u Anlamak
Anlayışı pekiştirmek için, Tim, her bir XOR adımının bitleri nasıl etkilediğini gösteren değiş-tokuş işleminin ikili bir sürümünü çalıştırır. Her bitin yalnızca gerektiğinde değiştiğini vurguluyor, bu da XOR'u değerleri değiştirmek için verimli bir yöntem yapıyor.
Sonuç
Tim, ana çıkarımları pekiştirerek sonlandırıyor:
- XOR yalnızca bitlerden biri tam olarak 1 olduğunda 1 değerini döndürür.
- Değerleri karşılaştırmak için verimli bir şekilde kullanılabilir.
- Üçüncü bir değişken olmadan iki değeri değiştirmeye yardımcı olur, bu da kodlama meydan okumalarında kullanışlı bir hile yapar.
İzleyicileri XOR'u deneyimlemeye ve derin bir anlayış geliştirmek için gerçek dünya problemlerine uygulamaya teşvik ediyor.
Son Düşünceler
Tim Corey'nin videosu, C#'deki XOR işlemi hakkında mükemmel, özlü bir açıklama sunar. Örnekleri adım adım inceleyerek, operatörün karşılaştırmalarda, farklarda ve hatta değer değişiminde nasıl yararlı olduğunu göstermektedir.
Eğer ikili işlemler veya bit tabanlı numaralar ile ilgileniyorsanız, C# ikili manipülasyonunuzu güçlendirmek için izlemeniz gereken bir video var.

