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ör | Açıklama | Örnek |
|---|---|---|
& (AND) | İki bitin de 1 olduğu yerde 1 döndürür. | 5 & 3 → 1 |
| ` | ` (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 ^ 3 → 6 |
~ (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 << 1 → 10 |
>> (Sağ Kaydırma) | Bütün bitleri sağa kaydırır (2’ye bölmek gibi). | 5 >> 1 → 2 |
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);
// 1C#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);
// 7C#2.3. Bitwise XOR (^)
Aynı bitler 0, farklı bitler 1 döndürür.
int sonuc = 5 ^ 3;
// 00000101 ^ 00000011 = 00000110
Console.WriteLine(sonuc);
// 6C#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);
// -6C#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); // 10C#Genel Formül: x << n → x * 2^n
Console.WriteLine(5 << 2); // 5 * 2^2 = 20
Console.WriteLine(3 << 3); // 3 * 2^3 = 24C#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); // 2C#Genel Formül: x >> n → x / 2^n
Console.WriteLine(16 >> 2); // 16 / 2^2 = 4
Console.WriteLine(32 >> 3); // 32 / 2^3 = 4C#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 Programlama | Bit 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ırma | Bit 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. |