Bitwise Operatörler ve Binary Manipülasyon

C# dilinde bitwise (bit düzeyinde) operatörler, veriler üzerinde ikili (binary) sistemde işlem yapmak için kullanılır. Bit manipülasyonu, düşük seviyeli optimizasyonlar, şifreleme, sıkıştırma ve donanım ile etkileşim gibi alanlarda kullanılır.

1. Bitwise Operatörler

C#’ta bit düzeyinde işlemler yapmak için kullanılan operatörler şunlardır:

OperatörAçıklamaÖrnek
& (AND)İki bitin de 1 olduğu yerde 1 döndürür.5 & 31
`` (OR)En az bir bitin 1 olduğu yerde 1 döndürür.
^ (XOR)Farklı bitlerde 1, aynı bitlerde 0 döndürür.5 ^ 36
~ (NOT)Bütün bitleri tersine çevirir (1 → 0, 0 → 1).~5-6
<< (Sol Kaydırma)Bütün bitleri sola kaydırır (2 ile çarpmak gibi).5 << 110
>> (Sağ Kaydırma)Bütün bitleri sağa kaydırır (2’ye bölmek gibi).5 >> 12

2. Bitwise Operatörlerin Çalışma Mantığı

Önce binary karşılıklarını inceleyelim:

5  = 00000101 (Binary)
3  = 00000011 (Binary)
C#

2.1. Bitwise AND (&)

Her iki bit 1 ise 1, aksi takdirde 0 döndürür.

int sonuc = 5 & 3; 
// 00000101 & 00000011 = 00000001
Console.WriteLine(sonuc); 
// 1
C#

2.2. Bitwise OR (|)

Herhangi bir bit 1 ise 1, aksi takdirde 0 döndürür.

int sonuc = 5 | 3; 
// 00000101 | 00000011 = 00000111
Console.WriteLine(sonuc); 
// 7
C#

2.3. Bitwise XOR (^)

Aynı bitler 0, farklı bitler 1 döndürür.

int sonuc = 5 ^ 3; 
// 00000101 ^ 00000011 = 00000110
Console.WriteLine(sonuc); 
// 6
C#

2.4. Bitwise NOT (~)

Bütün bitleri tersine çevirir.

int sonuc = ~5; 
// ~00000101 = 11111010 (İki'nin tamamlayıcısı -6 olur)
Console.WriteLine(sonuc); 
// -6
C#

Not: Negatif sayılar İki’nin Tamamlayıcısı (Two’s Complement) kullanılarak saklanır. Bu yüzden ~5 işlemi -6 sonucunu verir.

3. Bit Kaydırma Operatörleri

3.1. Sol Kaydırma (<<)

Tüm bitleri belirtilen kadar sola kaydırır. Her kaydırma 2 ile çarpmaya eşittir.

int sonuc = 5 << 1; // 00000101 << 1 = 00001010
Console.WriteLine(sonuc); // 10
C#

Genel Formül: x << nx * 2^n

Console.WriteLine(5 << 2); // 5 * 2^2 = 20
Console.WriteLine(3 << 3); // 3 * 2^3 = 24
C#

3.2. Sağ Kaydırma (>>)

Tüm bitleri belirtilen kadar sağa kaydırır. Her kaydırma 2’ye bölmeye eşittir.

int sonuc = 5 >> 1; // 00000101 >> 1 = 00000010
Console.WriteLine(sonuc); // 2
C#

Genel Formül: x >> nx / 2^n

Console.WriteLine(16 >> 2); // 16 / 2^2 = 4
Console.WriteLine(32 >> 3); // 32 / 2^3 = 4
C#

4. Bit Manipülasyon Teknikleri

Bit düzeyinde manipülasyon yaparak belirli bitleri değiştirme veya kontrol etme işlemleri gerçekleştirilebilir.

4.1. Belirli Bir Bit’i Kontrol Etme

Bir sayının belirli bir bitinin 1 olup olmadığını kontrol etmek için AND kullanılır.

bool BitKontrol(int sayi, int bitNo)
{
    return (sayi & (1 << bitNo)) != 0;
}

Console.WriteLine(BitKontrol(5, 0)); 
// true (5 = 00000101, 0. bit 1)
Console.WriteLine(BitKontrol(5, 1)); 
// false (1. bit 0)
C#

4.2. Belirli Bir Bit’i Açma (1 Yapma)

OR kullanarak bir biti 1 yapabiliriz.

int BitAc(int sayi, int bitNo)
{
    return sayi | (1 << bitNo);
}

Console.WriteLine(BitAc(5, 1)); 
// 7 (00000101 -> 00000111)
C#

4.3. Belirli Bir Bit’i Kapatma (0 Yapma)

AND ve NOT operatörleri kullanılarak belirli bir bit 0 yapılır.

int BitKapat(int sayi, int bitNo)
{
    return sayi & ~(1 << bitNo);
}

Console.WriteLine(BitKapat(7, 1)); 
// 5 (00000111 -> 00000101)
C#

4.4. Belirli Bir Bit’i Tersine Çevirme

Bir biti XOR ile tersine çevirebiliriz.

int BitTersle(int sayi, int bitNo)
{
    return sayi ^ (1 << bitNo);
}

Console.WriteLine(BitTersle(5, 1)); 
// 7 (00000101 -> 00000111)
Console.WriteLine(BitTersle(7, 1)); 
// 5 (00000111 -> 00000101)
C#

5. Kullanım Alanları

Kullanım AlanıAçıklama
Donanım ProgramlamaBit işlemleri genellikle mikrodenetleyicilerde kullanılır.
Şifreleme (Cryptography)Bit düzeyinde XOR işlemleri şifreleme algoritmalarında yaygın kullanılır.
Veri SıkıştırmaBit manipülasyonu ile sıkıştırma teknikleri uygulanır.
Ağ Programlama (Networking)IP adresleri ve bayraklar bit düzeyinde manipüle edilir.
Hata Kontrolü (Checksum)Veri bütünlüğünü doğrulamak için bit işlemleri kullanılır.