C++ bitwise operatörlerden right shift operatörünü konu alıyoruz >> . Right shift operatörü, C++ Dersleri | Bitwise Operatörleri | Left Shift Operatör konusunda bahsettiğimiz tüm özellikleri taşıyor, tek farkla : bit dizisini sağa doğru kaydırıyor. Bir örnekle right shift operatörünün nasıl kullanıldığına bakalım:
int main() { int a = 2; // 0010b int b = a >> 1; // 0001b cout << "a=" << a << ", b=" << b; }
çıktımız şu şekilde : a=2, b=1
Kolayca anlayabileceğimiz şekilde a değişkeni için oluşan binary sistem diziliminde indexlemeye göre 1. bit hanesinde yer alan operatöre gönderdiğimiz sayı :1 adedince sağ tarafa kaydırılmış. Left Shift operatörü için sayıyı 2 'nin kuvvetleriyle çarpmakla aynı şey demiştik, burada olan da sayıyı 2 'nin kuvvetleriyle bölmekle aynı şeydir. a değişkeninin değeri olan 2 'yi 2^1 'e (bu 1 operatöre gönderilen 1) bölerek 1 elde etmiş olduk:
Farklı sayılarla denememiz gerekirse :
int main() { int a = 44; int b = a >> 2; cout << "a=" << a << ", b=" << b; // 44/2^2 -> 44/4 -> b=11 çıktısını üretir. a = 128; b = a >> 5; cout << "a=" << a << ", b=" << b; //128/2^5 ->128/32 -> b = 4 çıktısını üretir. }
Yine, left shift operatöründe olduğu gibi kaydırma operatörüne gönderdiğimiz kaç bit kaydırılacağı değeri, negatif olamaz Önemli bir nokta daha işaretli sayılarla çalışıyorsak şayet, bit kaydırması yapılacak operandın yani a değişkeninin de pozitif olması gerekir, negatif sayılardaki davranışı da işlemi yapacağını garanti etmez ve undefined behavior olarak tanımlanır.
Son olarak bu operatörün operandlar üzerinde değer değiştirmediğini unutmayın diyelim :
int main() { int a = 2; a >> 1; cout << "a=" << a << endl; // a=2 a >>= 1; cout << "a=" << a << endl; // a=1 }
yani a >> 1 yaparak a 'nın değerini değiştiremeyiz, eşittir operatörünü kullanmak durumundayız :)
Herkese kolay gelsin.
Önceki konu: C++ Left Shift Operatörü
Sonraki Konu: C++ ile Bit Manipülasyonları
Hiç yorum yok:
Yorum Gönder