C++ Dersleri | Bit İşlemleri | Bitwise OR

 C++ bitwise OR operatörü dijital elektronikten bildiğimiz VEYA ile aynı şeydir, doğruluk tablosunu hatırlamayanlar için bir görsel ekleyelim :

Veya doğruluk tablosu

kodlarken de aynı değişken isimlerini kullanalım :

int main()
{
    int a = 7;          // 0111
    int b = 13;         // 1101
    int aORb = a | b;   // 1111
    cout << "a = " << a << ", b= " << b << ", a | b = " << aORb << endl;
}

çıktımız : a = 7, b= 13, a | b = 15 

Peki neler oldu nasıl 15 elde ettik, binary formatındaki sayıları alt alta yazarak soldan sağa doğru sutunları OR işlemine tabi tutuyoruz : en soldan yukarda 0 aşağıda 1 sonuç 1, bir sonrakinde yukarda 1 aşağıda 1, sonuç 1, bir sonrakinde, yukarda 1 aşağıda 0, sonuç 1, en sonda da yukarda 1 aşağıda 1, den sonuç 1 gelmiş oldu.

Hatırlatmış olayım : bu operatör bir değişkene eşitlenmediği sürece bir değişikliğe yol açmaz, ne demeye çalışıyorum şöyle örneklendirelim :

int a = 7;          // 0111
a | 5;
cout << "a = " << a << endl;

a değişkeni hala 7 değerindedir. a | 5 değerinin, a nın yeni değeri olmasını istiyorsak : a = a | 5; yazabilir ya da daha kısa olacak şekilde : a |= 5; yazabiliriz.

Peki gömülü sistemlerde nerde karşımıza çıkar, AVR programlarken Atmega328p için yazmış olalım port durumu ayarladığımız: DataDirectionRegister{PortName} kısaca DDRB (B portunu kullanıyor olalım) bir pini çıkış olarak ayarlamak istediğimizde o pine ait bit i 1 yapmamız gerekiyor, pinimiz de 3 olsun : DDRB = 0b00001000; yazarsak 3 numaralı pinimiz çıkış olur, ama evvelden 2 numaralı pini çıkış yapmışsak artık o konfigurasyonu kaybetmiş oluruz, bunun önüne geçmek için bitwise OR imdadımıza yetişiyor : DDRB |= 0b00001000; yazdığımız vakit eski konfigurasyon aynen korunur, indekse göre (soldaki ilk bit 0 olarak kabul edilir) sadece 3. bitin 1 olması sağlanmış olur. Evvelce sadece 2 pini çıkış olarak ayarladığımızı varsayalım DDRB : 00000100 durumundayken : 

00000100

00001000 | 

-------------

00001100 halini almış olur.

Örneklerde bunu genellikle şöyle görüyor oluruz : 

PORTB |= (1<<PORTB3);

bit shift operatöründe detaylarına bakarız, ama olan şudur PORTB3 avr.io içerisinde 0b00001000 olarak define edilmiştir, bu şekilde kullanılarak, geri dönüp bu satırda hangi pini aktif ettiğimizi anlamak adına, okunabilirliğin kolaylaşması için bu yöntem kullanılır.

Herkese Kolay gelsin!

Video Anlatımı :



Önceki konu : Bit İşlemleri - bitwise Operators

Sonraki konu: Bit İşlemleri | Bitwise XOR, Özel Veya Operatörü

Hiç yorum yok:

Yorum Gönder