Merhaba, C++ Bitwise Operatörler ve İkili Sayı Sistemi ile C++ derslerine devam ediyorum. Bu dersimizde C++ bitwise operatörlerinin çalışma mantığını daha iyi anlayabilmek için ikilik sayı sistemine de bakacağız. Çünkü bitwise dediğimiz operatörler bit düzeyinde çalışmaktadır. Yapılan karşılaştırmalarda verilen verilerin 010101 düzeyinde karşılaştırılması yapılır. Bu sebeple ikili sayı sistemini de anlamamız gerekir.
C++ Bitwise Operatörler ve İkili Sayı Sistemi
Öncelikle ikil sayı sistemini anlamamız gerekiyor.
İkili Sayı Sistemi
Elektronik devreler 0 ve 1 ler ile çalışırlar. Bu 0 ve 1’ler bir araya gelerek bizim anlayabileceğimiz değerlere dönüşürler. Örneğin 11 sayısını ele alalım. 11 sayısını ikili sayı sistemindeki karşılığı 1011 sayısıdır. Şimdi gelin bu dönüşümü nasıl yaptığımıza bakalım.
Onluk Sayıdan İkilik Sayıya Dönüştürme
11 sayısını ele alalım. 11 sayısının ikili sayı sisteminde karşılığını bulabilmek için 11 sürekli 2’ye bölmemiz gerekiyor. Aşağıdaki görselde görebilirsiniz.
11 / 2 işleminde bölüm 5 kalan 1’dir. Burada bize lazım olan kalandır. Bölümü tekrar ikiye böleceğiz. 5 / 2 işleminde bölüm 2 kalan 1’dir Burada yine kalan bize gereklidir. 2 / 2 işleminde bölüm 1 kalan 0’dır. 1 / 2 işlemi tam sayı olmadığı için burada duruyoruz. kalan son bölümdeki sayı dahil tüm kalan sayıları yan yana yazıyoruz.
Yukarıdaki görselde anlattığım yöntemi görebiliyorsunuz.
İkili Sayıdan Onluk Sayıya Dönüştürme
1011 sayısını ele alalım. Aşağıdaki görselde ikili sayı sisteminde olan sayıyı onlu sayı sistemine dönüşümü yer almaktadır.
İkilik sistemdeki bir sayıyı onluk sistemde bir sayıya çevirmek istersek yukarıdaki gibi bir işlem yapmamız gerekiyor. Burada dikkat etmemiz gereken şeylerden birisi en soldaki sayı en büyük üs ile çarpılır. Ben anlaşılması adına tersten yazdım.
İşleme en sağdaki rakamdan başlarız. 1’ler için 1 ile 0’lar için 0 ile çarparız. İkili sayı sisteminden çevirim yaptığımız için sırası ile artarak her sayıyı 2n olarak kuvvet alırız. Aşağıda tekrar veriyorum.
1 . 20 = 1
1 . 21 = 2
0 . 22 = 0
1 . 23 = 8
1 + 2 + 0 + 8 = 11
Bu işlemlerin sonuçlarının toplamı da bize 11 sayısını verir.
Daha net anlatmaya çalışırsak, her basamaktaki sayı ile sıfırdan başlayarak basamak sırasını, 2’nin üssü olarak kullanarak ilgili basamağı hesaplarız.
Birinci basamakta 1 var. O halde işlem 1 . 20 olacaktır.
İkinci basamakta 1 var. O halde 1 . 21 olacaktır.
Üçüncü basamakta 0 var. O halde 0 . 22 olacaktır. Normalde hızlı hesaplama açısından 0 ile çarpımda ne olursa olsun sonuç 0 olacağı için genelde hiç hesaba katılmazlar ve atlanırlar. Ama sırasını savmış olur. Yani 0 değil de 1 olsaydı alması gereken değer kullanılmış olacaktır. Bu yüzden bu örneğimizde 22 kullanılmıştır ve tekrarlamayacaktır. Hesaba 23 lie devam edeceğiz.
Dördüncü basamakta 1 var. O halde 1 . 23 olacaktır.
Dönüşümleri elimden geldiğince detaylı anlatmaya çalıştım. Şimdi asıl konumuza gelelim. :)
C++ Bitwise Operatörler
Bitwise operatörleri 5 adettir. Bunlar şöyledir.
- & : Ve
- | : Veya
- ^ : Ya da
- << : Sola Ötele
- >> : Sağa Ötele
Şimdi bu operatörleri görelim.
1 – Sağa ve Sola Öteleme Operatörleri (SHIFT Operatörleri)
Sola kaydırma operatörü, değişkene atanmış olan değeri ikilik sayı düzeyindeki karşılığına iki adet 0 ekleme işlemini yapar. Yani ne kadar belirtildi ise sayıyı ikilik sayı düzeyinde o kadar sola kaydırır. Sağa kaydırma operatörü de tam tersi şekilde sağa ekleme yaparak sayıyı ikilik sayı düzeyinde belirtildiği kadar sağa kaydırır.
Örnek olarak elimizde 19 sayısı olsun. Bu sayının ikilik tabandaki değeri 10011 ‘dir. Bu sayıyı iki hane sola kaydırmak istediğimizde sonuç 1001100 olacaktır. En sağa iki sıfır ekleyerek verilen değeri sola doğru kaydırmış olduk. 1001100 sayısının onluk sayı sistemindeki karşılığı ise 76 sayısıdır.
Şimdi C++ kodlarını kullanarak bu işlemin kodlarını görelim.
// sola kaydirma int ilk1 = 19; cout << ilk1 << endl; int son1 = ilk1 << 2; cout << son1 << endl; // sağa kaydirma int ilk2 = 76; cout << ilk2 << endl; int son2 = ilk2 >> 2; cout << son2 << endl;
Ekran çıktısını görelim. Burada sağlamasını yapmak için aynı sayıları kullandım.
Gördüğünüz gibi kaydırma operatörlerinin çalışma şekli bu şekildedir.
2 – Ve Veya ve Ya da Operatörleri
Bu ifadeler Bitwise And, Bitwise OR ve Bitwise XOR olarak da bilinmektedir. Şimdi bu operatörlerin kullanımına geçelim. Unutmadan söylemek isterim ki hala 0 ve 1’ler ile uğraşıyoruz. Bu yazıyı bağımsız bir konu olarak yazma istememdeki amaçta aslında biraz kafa karıştıran bir konu olmasıdır.
Ve ( & ) Operatörü
Karşılaştırılan iki sayınında 1 olması durumunda 1 diğer tüm durumlarda 0 döner. Örnek üzerinde bakalım. 22 ile 13 sayılarını Ve operatörü ile karşılaştıralım.
int x = 22 & 13; cout << x << endl;
Bu işlemin sonucunda alacağımız değer 4 ‘dür. Burada 22 ve 13 sayıları ikilik sistemde çevrildi ve bitler karşılaştırıldı. Alt Alta gelen 1’ler için 1 diğer tüm ihtimaller için 0 yazıldı. Bu sebeple değer 4 çıktı. Siz bu sayıları ikili sayı sistemine çevirip karşılaştırmasını yapabilirsiniz. Aşağıdaki görselde rastgele sayılar üzerinden & operatörünün çalışma şekli gösterilmiştir.
Veya ( | ) Operatörü
Ve operatörünün tam tersi şeklinde çalışıyor desek yanlış olmaz sanırım. Veya operatöründe karşılaştırılan iki sayı da 0 ise 0 diğer tüm ihtimallerde 1 ‘dir. 22 ve 13 veya operatörü ile karşılaştıralım.
int y = 22 | 13; cout << y << endl;
Bu işlemin sonucunda alacağımız değer 31 ‘dir. Burada 22 ve 13 sayıları ikilik sistemde çevrildi ve bitler karşılaştırıldı. Alt Alta gelen 0’ler için 0 diğer tüm ihtimaller için 1 yazıldı. Bu sebeple değer 31 çıktı. Siz bu sayıları ikili sayı sistemine çevirip karşılaştırmasını yapabilirsiniz. Aşağıdaki görselde rastgele sayılar üzerinden | operatörünün çalışma şekli gösterilmiştir.
Yada ( ^ ) Operatörü
Yada operatöründe karşılaştırılan iki sayı farklı ise 1 aynı ise 0’dır. 22 ve 13 veya operatörü ile karşılaştıralım.
int z = 22 ^ 13; cout << z << endl;
Bu işlemin sonucunda alacağımız değer 27 ‘dir. Burada 22 ve 13 sayıları ikilik sistemde çevrildi ve bitler karşılaştırıldı. Alt Alta gelip aynı sayılar için 0 farklı olan sayılar için 1 yazıldı. Bu sebeple değer 27 çıktı. Siz bu sayıları ikili sayı sistemine çevirip karşılaştırmasını yapabilirsiniz. Aşağıdaki görselde rastgele sayılar üzerinden ^ operatörünün çalışma şekli gösterilmiştir.
Bitwise operatörlerinin anlatımı bu şekildeydi arkadaşlar.
C++ Bitwise Operatörler ve İkili Sayı Sistemi yazımda bu kadardı arkadaşlar. Bu dersler Yapay Zeka temelinde olduğundan dolayı ilgili kategorinin derslerine ulaşmak için bağlantıya tıklayabilirsiniz. Ayrıca C++ dersleri içinde bir sayfa hazırladım. O sayfaya da bağlantıya tıklayarak ulaşabilirsiniz. Discord’a katılmayı unutmayın.
Diğer derslerde görüşürüz.
Bol Kodlu günler! ?