C Bitsel Operatörler: AND, OR, XOR, Complement ve Shift Operasyonları

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 

Ilginç makaleler...