Bitwise Operatörlerine Kısa Bir Bakış
Operatör, derleyiciye belirli matematiksel veya mantıksal işlemleri gerçekleştirmesini söyleyen bir semboldür. C++'da çeşitli operatör türleri vardır, örneğin:
- Aritmetik operatörler
- Mantıksal operatörler
- İlişkisel Operatörler
- Atama Operatörleri
- Bitsel Operatörler
- Çeşitli Operatörler
Tüm Bitwise operatörleri bireysel bit seviyesinde çalışır. Bitsel operatör yalnızca tamsayı ve karakter veri türlerine uygulanabilir. Örneğin, 32 bit boyutunda bir tamsayı tipi değişkeniniz varsa ve bit düzeyinde DEĞİL işlemi uygularsanız, bit düzeyinde NOT operatörü tüm 32 bit için uygulanacaktır. Böylece, sonunda, değişkendeki tüm 32 bit ters çevrilir.
C++'da kullanılabilen altı farklı bitsel operatör vardır:
- Bitsel VEYA [“|” olarak gösterilir]
- Bitsel VE [“&” olarak gösterilir]
- Bitsel DEĞİL [“~” olarak gösterilir]
- Bitsel XOR [“^” olarak gösterilir]
- Bitsel Sola Kaydırma [“ olarak temsil edilir<<”]
- Bitsel Sağa Kaydırma [“>>” olarak gösterilir]
Bitsel VEYA Doğruluk Tablosu
Bitsel VEYA operatörü, en az bir işlenen 1'e ayarlandığında 1 üretir. Bitwise OR operatörünün doğruluk tablosu:
Bit-1 | bit-2 | Bit-1 | bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Bitsel VE Doğruluk Tablosu
Bitsel AND operatörü, her iki işlenen de 1'e ayarlandığında 1 üretir. Bitwise AND operatörünün doğruluk tablosu:
Bit-1 | bit-2 | Bit-1 ve Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Bitwise NOT Doğruluk Tablosu
Bitsel NOT operatörü işleneni tersine çevirir. Bitwise NOT operatörünün doğruluk tablosu:
Bit-1 | ~Bit-1 |
---|---|
0 | 1 |
1 | 0 |
Bitsel XOR Doğruluk Tablosu
Bitsel XOR operatörü, yalnızca ve yalnızca işlenenlerden biri 1'e ayarlanmışsa 1 üretir. Bitwise AND operatörünün doğruluk tablosu:
Bit-1 | bit-2 | Bit-1 ^ Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Bitsel Sol Kaydırma Operatörü
Bitsel Sola Kaydırma operatörü, belirtilen sayıda belirtilen bit tarafından kalan tüm bitleri kaydırır. Verinin tüm bitlerini 1 ile sola kaydırırsanız, orijinal veriler 2 ile çarpılacaktır. Benzer şekilde, verilerin tüm bitlerini 2 ile sola kaydırırsanız, orijinal veriler 4 ile çarpılacaktır.
Bitsel Sağa Kaydırma İşleci
Bitsel Sağa Kaydırma operatörü, tüm bitleri belirtilen sayıda belirtilen bit kadar sağa kaydırır. Verinin tüm bitlerini 1 ile sağa kaydırırsanız, orijinal veri 2'ye bölünecektir (tamsayı bölümü). Benzer şekilde, verilerin tüm bitlerini 2 ile sağa kaydırırsanız, orijinal veriler 4'e bölünecektir (tamsayı bölümü).
Örnekler
Şimdi, bitsel işlemlerin temel kavramını anladığımıza göre, C++'daki bitsel işlemleri anlamanıza yardımcı olacak birkaç örneğe bakalım:
- Örnek-1: Bitsel VEYA Operatörü
- Örnek-2: Bitsel VE Operatör
- Örnek-3: Bitsel DEĞİL Operatör
- Örnek-4: Bitsel XOR Operatörü
- Örnek-5: Bitsel Sola Kaydırma İşleci
- Örnek-6: Bitsel Sağa Kaydırma Operatörü
- Örnek-7: Biti Ayarla
- Örnek-8: Biti Temizle
Örnek-7 ve 8, C++ programlama dilinde bitsel operatörlerin gerçek dünyadaki kullanımını göstermek içindir.
Örnek-1: Bitsel VEYA Operatörü
Bu örnek programda, Bitwise OR operatörünü göstereceğiz.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int sayı)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayı = 7, ikinci_sayı = 9, sonuç = 0;
// Bitsel VEYA işlem
sonuç = ilk_sayı | saniye_sayısı;
// giriş numaralarını yazdır
cout << endl;
display("İlk Sayı = ", first_num);
display("İkinci Sayı = ", second_num);
// çıktı değerini yazdır
display("birinci_sayı | ikinci_sayısı = ", sonuç);
cout << endl;
0 döndür;
Örnek-2: Bitsel VE Operatör
Bu örnek programda, Bitwise AND operatörünü göstereceğiz.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int numarası)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayı = 7, ikinci_sayı = 9, sonuç = 0;
// Bitsel VE işlem
sonuç = first_num & second_num;
// giriş numaralarını yazdır
cout << endl;
display("İlk Sayı = ", first_num);
splay("İkinci Sayı = ", saniye_sayısı);
// çıktı değerini yazdır
display("birinci_sayı ve ikinci_sayısı = ", sonuç);
cout << endl;
0 döndür;
Örnek-3: Bitsel DEĞİL Operatör
Bu örnek programda, Bitwise NOT operatörünün C'de nasıl çalıştığını anlayacağız++.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int sayı)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayısı = 7, ikinci_sayısı = 9, sonuç_1 = 0, sonuç_2 = 0;
// Bitsel DEĞİL işlemi
sonuç_1 = ~ilk_sayı;
sonuç_2 = ~saniye_sayısı;
// giriş numaralarını ve çıkış değerini yazdır
cout << endl;
display("İlk Sayı = ", first_num);
display("~first_num = ", sonuç_1);
cout << endl;
// giriş numaralarını ve çıkış değerini yazdır
display("İkinci Sayı = ", second_num);
display("~second_num = ", sonuç_2);
cout << endl;
0 döndür;
Örnek-4: Bitsel XOR Operatörü
Bu program, Bitwise XOR operatörünün C'de nasıl çalıştığını açıklamayı amaçlamaktadır++.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int numarası)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayı = 7, ikinci_sayısı = 9, sonuç = 0;
// Bitsel XOR işlemi
sonuç = birinci_sayı ^ ikinci_sayısı;
// giriş numaralarını yazdır
cout << endl;
display("İlk Sayı = ", first_num);
display("İkinci Sayı = ", second_num);
// çıktı değerini yazdır
display("birinci_sayı ^ ikinci_sayısı = ", sonuç);
cout << endl;
0 döndür;
Örnek-5: Bitsel Sola Kaydırma İşleci
Şimdi Bitwise Left Shift operatörünün örneğini göreceğiz. Bu programda tamsayı tipinde first_num ve second_num olmak üzere iki sayı belirledik. Burada, "birinci_sayı" bir bit sola kaydırılır ve "ikinci_sayı" iki bit sola kaydırılır.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int sayı)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayısı = 7, ikinci_sayısı = 9, sonuç_1 = 0, sonuç_2 = 0;
// Bitsel Sola Kaydırma işlemi
sonuç_1 = first_num << 1;
sonuç_2 = saniye_sayısı << 2;
// giriş numaralarını ve çıkış değerini yazdır
cout << endl;
display("İlk Sayı = ", first_num);
display("first_num << 1 = ", result_1);
cout << endl;
// giriş numaralarını ve çıkış değerini yazdır
display("İkinci Sayı = ", second_num);
display("saniye_sayısı << 2 = ", result_2);
cout << endl;
0 döndür;
Örnek-6: Bitsel Sağa Kaydırma Operatörü
Şimdi Bitwise Right Shift operatörünü anlamak için başka bir örnek göreceğiz. Tamsayı tipinde first_num ve second_num olmak üzere iki sayı belirledik. Burada, "first_num" bir bit sağa kaydırılır ve "second_num" iki bit sağa kaydırılır.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int sayı)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayısı = 7, ikinci_sayısı = 9, sonuç_1 = 0, sonuç_2 = 0;
// Bitsel Sağa Kaydırma işlemi
sonuç_1 = first_num >> 1;
sonuç_2 = saniye_sayısı >> 2;
// giriş numaralarını ve çıkış değerini yazdır
cout << endl;
display("İlk Sayı = ", first_num);
display("first_num >> 1 = ", sonuç_1);
cout << endl;
// giriş numaralarını ve çıkış değerini yazdır
display("İkinci Sayı = ", second_num);
display("second_num >> 2 = ", sonuç_2);
cout << endl;
0 döndür;
Örnek-7: Biti Ayarla
Bu örnek, bit düzeyinde operatörler kullanarak belirli bir bitin nasıl ayarlanacağını göstermeyi amaçlamaktadır.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int sayı)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayı = 7, ikinci_sayı = 9;
// giriş numarasını yazdır - first_num
cout << endl;
display("İlk Sayı = ", first_num);
// 5. biti ayarla
first_num |= (1UL << 5);
// Çıktıyı yazdır
display("first_num'un 5. bitini ayarla = ", first_num);
cout << endl;
// giriş numarasını yazdır - second_num
cout << endl;
display("İkinci Sayı = ", second_num);// 6. biti ayarla
saniye_sayısı |= (1UL << 6);
// Çıktıyı yazdır
display("second_num'un 6. bitini ayarla = ", second_num);
cout << endl;
0 döndür;
Örnek-8: Biti Temizle
Bu örnek, bitsel operatörleri kullanarak belirli bir bitin nasıl temizleneceğini göstermeyi amaçlamaktadır.
#Dahil etmek#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
// göster() işlevi
void display(string print_msg, int sayı)
bit kümesi<16> myBitSet(sayı);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int ana()
int birinci_sayı = 7, ikinci_sayı = 9;
// giriş numarasını yazdır - first_num
cout << endl;
display("İlk Sayı = ", first_num);
// 2. biti temizle
first_num &= ~(1UL << 2);
// Çıktıyı yazdır
display("first_num'un 2. bitini ayarla = ", first_num);
cout << endl;
// giriş numarasını yazdır - second_num
cout << endl;
display("İkinci Sayı = ", second_num);
// 3. biti temizle
saniye_sayı &= ~(1UL << 3);
// Çıktıyı yazdır
display("second_num'un 3. bitini ayarla = ", second_num);
cout << endl;
0 döndür;
Sonuç
Bitsel operatör, öncelikle tamsayı ve karakter veri türü için ayrı bitleri işlemek için kullanılır. Bitsel operatör, gömülü yazılım geliştirmede yoğun olarak kullanılır. Dolayısıyla donanım düzeyine çok yakın bir aygıt sürücüsü veya sistem geliştiriyorsanız bu bitsel operatörleri kullanmak isteyebilirsiniz.