Bu eğitimde, örneklerle C programlamadaki 6 bitsel işleç hakkında bilgi edineceksiniz.
Aritmetik-mantık biriminde (CPU içinde bulunur), toplama, çıkarma, çarpma ve bölme gibi matematiksel işlemler bit düzeyinde yapılır. C programlamada bit seviyesinde işlemler gerçekleştirmek için bitsel operatörler kullanılır.
Operatörler | Operatörlerin anlamı |
---|---|
& | Bitsel AND |
| | Bit tabanlı VEYA |
^ | Bitsel ÖZELVEYA |
~ | Bitsel tamamlayıcı |
<< | Sola kay |
>> | Sağa kaydır |
Bitsel AND operatörü &
İki işlenenin karşılık gelen bitleri 1 ise bitsel AND'nin çıktısı 1'dir. Bir işlenenin herhangi bir biti 0 ise, karşılık gelen bitin sonucu 0 olarak değerlendirilir.
12 ve 25 numaralı iki tam sayının bitsel AND işlemini varsayalım.
12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) 12 ve 25 Bit İşlemi 00001100 & 00011001 ________ 00001000 = 8 (Ondalık olarak)
Örnek 1: Bitsel AND
#include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; )
Çıktı
Çıkış = 8
Bitsel OR operatörü |
İki işlenenin en az bir biti 1 ise, bitsel OR'nin çıkışı 1'dir. C Programlamada bitsel OR operatörü | ile gösterilir.
12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) Bitsel VEYA 12 ve 25 İşlemleri 00001100 | 00011001 ________ 00011101 = 29 (Ondalık olarak)
Örnek 2: Bitsel OR
#include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; )
Çıktı
Çıkış = 29
Bitsel ÖZELVEYA (özel OR) operatörü ^
İki işlenenin karşılık gelen bitleri zıt ise bitsel XOR operatörünün sonucu 1'dir. İle gösterilir.
12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) 12 ve 25 Bitsel XOR İşlemi 00001100 00011001 ________ 00010101 = 21 (Ondalık olarak)
Örnek 3: Bitsel ÖZELVEYA
#include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )
Çıktı
Çıkış = 21
Bitsel tümleme operatörü ~
Bitsel iltifat operatörü tekli bir operatördür (yalnızca bir işlenen üzerinde çalışır). 1'den 0'a ve 0'dan 1'e değişir. ~ İle gösterilir.
35 = 00100011 (İkili Olarak) Bitsel tamamlayıcı 35 ~ 00100011 ________ İşlemi 11011100 = 220 (Ondalık olarak)
C Programlamada bitsel tamamlayıcı operatörde çevir
35'in bitsel tamamlayıcısı (~ 35) 220 yerine -36'dır, ama neden?
Herhangi bir n tamsayısı için, n'nin bit tabanlı tamamlayıcısı olacaktır -(n+1)
. Bunu anlamak için 2'nin tamamlayıcısı bilgisine sahip olmalısınız.
2's Tamamlayıcı
İkinin tümleyicisi, ikili sayılar üzerinde bir işlemdir. Bir sayının 2'nin tümleyicisi, o sayının tümleyicisi artı 1'e eşittir. Örneğin:
Ondalık İkili 2'nin tamamlayıcısı 0 00000000 - (11111111 + 1) = -00000000 = -0 (ondalık) 1 00000001 - (11111110 + 1) = -11111111 = -256 (ondalık) 12 00001100 - (11110011 + 1) = -11110100 = -244 (ondalık) 220 11011100 - (00100011 + 1) = -00100100 = -36 (ondalık) Not: 2'nin tamamlayıcısı hesaplanırken taşma yok sayılır.
35'in bitsel tamamlayıcısı 220'dir (ondalık olarak). 2'nin 220'nin tamamlayıcısı -36'dır. Dolayısıyla çıktı 220 yerine -36'dır.
Herhangi bir N sayısının bit tabanlı tamamlayıcısı - (N + 1). Bunu nasıl yapacağınız aşağıda açıklanmıştır:
N = ~ N'nin bitsel tümleyeni (2'nin tümleyen formunda temsil edilir) 2 'tamamlayıcısı ~ N = - (~ (~ N) +1) = - (N + 1)
Örnek 4: Bitsel tamamlama
#include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; )
Çıktı
Çıkış = -36 Çıkış = 11
C programlamada Shift Operatörleri
C programlamada iki vardiya operatörü vardır:
- Sağ kaydırma operatörü
- Sol vardiya operatörü.
Sağ Vites Operatörü
Sağ kaydırma operatörü, tüm bitleri belirli sayıda belirtilen bit kadar sağa kaydırır. >> ile gösterilir.
212 = 11010100 (İkili olarak) 212 >> 2 = 00110101 (İkili olarak) (İki bitlik sağa kaydırma) 212 >> 7 = 00000001 (İkili olarak) 212 >> 8 = 00000000 212 >> 0 = 11010100 (Kaydırma Yok)
Sol Kaydırma Operatörü
Sol kaydırma operatörü, tüm bitleri belirli sayıda belirtilen bit kadar sola kaydırır. Sol kaydırma operatörü tarafından boşaltılan bit pozisyonları 0 ile doldurulur. Sol kaydırma operatörünün sembolü <<'dir.
212 = 11010100 (İkili olarak) 212 << 1 = 110101000 (İkili olarak) (Bir bit sola kaydırma) 212 << 0 = 11010100 (0 ile kaydırma) 212 << 4 = 110101000000 (İkili olarak) = 3392 (Ondalık olarak )
Örnek 5: Kaydırma Operatörleri
#include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num<
Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848