C Bitsel Operatörler: AND, OR, XOR, Shift & Tamamlayıcı (Örnekle)

İçindekiler:

Anonim

Bitsel Operatörler nedir?

BITWISE OPERATORS , bit seviyesinde, aynı zamanda bit seviyesinde programlama olarak da adlandırılan verilerin manipüle edilmesi için kullanılır. Bitsel, kendi bitlerinin seviyesinde bir veya daha fazla bit örüntüsü veya ikili sayı üzerinde çalışır. Hesaplama sürecini hızlandırmak için sayısal hesaplamalarda kullanılırlar.

'C' programlama dili tarafından sağlanan bitsel operatörlerin listesi aşağıdadır:

Şebeke Anlam
& Bitsel AND operatörü
| Bit tabanlı OR operatörü
^ Bit düzeyinde özel OR operatörü
~ İkili Bir'in Tamamlayıcı Operatörü tekli bir operatördür
<< Sol vardiya operatörü
>> Sağ kaydırma operatörü

Bitsel operatörler float, double, vb. Gibi ilkel veri türlerine doğrudan uygulanamaz. Bitsel operatörlerin uyumluluğu nedeniyle çoğunlukla tamsayı veri türüyle kullanıldığını her zaman unutmayın.

Bitsel mantıksal operatörler, veri üzerinde, en önemsiz bitten başlayarak, yani en sağdaki bit olan LSB bitinden başlayarak, en soldaki bit olan MSB'ye (En Önemli Bit) doğru ilerleyerek çalışır.

Bitsel mantıksal operatörlerin hesaplanmasının sonucu aşağıdaki tabloda gösterilmektedir.

x y x & y x | y x y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Bu eğitimde öğreneceksiniz-

  • Bitsel Operatörler nedir?
  • Bitsel VE
  • Bitsel VEYA
  • Bitsel Ayrıcalıklı VEYA
  • Bitsel kaydırma operatörleri
  • Bitsel tümleme operatörü

Bitsel VE

Bu, en yaygın kullanılan mantıksal bitsel operatörlerden biridir. Tek bir "ve" işareti (&) ile temsil edilir. (&) Operatörünün her iki tarafına iki tamsayı ifadesi yazılır.

Her iki bit de 1 değerine sahipse, bitsel AND işleminin sonucu 1'dir; aksi takdirde sonuç her zaman 0'dır.

Aşağıdaki gibi değerlere sahip 2 değişkenimiz op1 ve op2 olduğunu düşünelim:

Op1 = 0000 1101Op2 = 0001 1001

VE işleminin op1 ve op2 değişkenleri üzerindeki sonucu şu olacaktır:

Result = 0000 1001

Gördüğümüz gibi, iki değişken parça parça karşılaştırılıyor. Her iki değişkendeki bir bitin değeri 1 olduğunda, sonuç 1 veya 0 olacaktır.

Bitsel VEYA

Tek bir dikey çubuk işaretiyle (|) temsil edilir. (|) Operatörünün her iki tarafına iki tamsayı ifadesi yazılır.

İfadeden en az birinin değeri 1 ise bitsel OR işleminin sonucu 1'dir; aksi takdirde sonuç her zaman 0'dır.

Aşağıdaki gibi değerlere sahip 2 değişkenimiz op1 ve op2 olduğunu düşünelim:

Op1 = 0000 1101Op2 = 0001 1001

OR işleminin op1 ve op2 değişkenleri üzerindeki sonucu

Result = 0001 1101

Gördüğümüz gibi, iki değişken parça parça karşılaştırılıyor. Değişkenlerden birindeki bir bitin değeri 1 olduğunda, sonuç 1 veya 0 olacaktır.

Bitsel Ayrıcalıklı VEYA

Bir sembol (^) ile temsil edilir. (^) Operatörünün her iki tarafına iki tamsayı ifadesi yazılır.

İfadenin yalnızca biri 1 değerine sahipse, bitsel Dışlayıcı-OR işleminin sonucu 1'dir; aksi takdirde sonuç her zaman 0'dır.

Aşağıdaki gibi değerlere sahip 2 değişkenimiz op1 ve op2 olduğunu düşünelim:

Op1 = 0000 1101Op2 = 0001 1001

OR işleminin op1 ve op2 değişkenleri üzerindeki sonucu

Result = 0001 0100

Gördüğümüz gibi, iki değişken parça parça karşılaştırılıyor. Sadece bir değişken 1 değerini tuttuğunda, sonuç 0'dır, aksi takdirde sonuç 0 olacaktır.

Bitsel mantıksal operatörleri gösteren basit bir program yazalım.

#include int main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}

Çıktı:

AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1

Bitsel kaydırma operatörleri

Bitsel kaydırma operatörleri, bit desenlerini sola veya sağa taşımak / kaydırmak için kullanılır. Sol ve sağ, aşağıdaki gibi temsil edilen 'C' tarafından sağlanan iki vardiya operatörüdür:

Operand << n (Left Shift)Operand >> n (Right Shift)

Buraya,

  • bir işlenen, üzerinde kaydırma işlemini gerçekleştirmemiz gereken bir tamsayı ifadesidir.
  • 'n', tamsayı ifadesinde kaydırmamız gereken toplam bit konumu sayısıdır.

Sol kaydırma işlemi, 'n' bit sayısını sol tarafa kaydıracaktır. İfadedeki en soldaki bitler dışarı çıkarılacak ve 0 değerine sahip n bit sağ tarafa doldurulacaktır.

Sağ kaydırma işlemi, 'n' bit sayısını sağ tarafa kaydıracaktır. İfadedeki en sağdaki 'n' bit dışarı çıkacak ve 0 değeri sol tarafa doldurulacaktır.

Örnek: x, veri 1111 içeren bir tamsayı ifadesidir. Kaydırma işlemini gerçekleştirdikten sonra sonuç şöyle olacaktır:

x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011

Kaydırma operatörleri birleştirilebilir, ardından verileri tamsayı ifadesinden çıkarmak için kullanılabilir. Bitsel kaydırma operatörlerinin kullanımını göstermek için bir program yazalım.

#include int main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}

Çıktı:

Left shift - Value of c is 80Right shift - Value of c is 5

Sol kaydırma işlemini gerçekleştirdikten sonra, değer, ikili eşdeğeri 101000 olan 80 olacaktır.

Doğru kaydırma işlemini gerçekleştirdikten sonra, değer, ikili eşdeğeri 000101 olan 5 olacaktır.

Bitsel tümleme operatörü

Bitsel tamamlayıcı, her zaman yalnızca bir değer veya bir işlenen aldığından, kişinin tümleme operatörü olarak da adlandırılır. Tekli bir operatördür.

Herhangi bir bit üzerinde tümleme yaptığımızda, tüm 1'ler 0 olur ve bunun tersi de geçerlidir.

0000 1111 içeren bir tamsayı ifademiz varsa, bitsel tümleme işlemi gerçekleştirdikten sonra değer 1111 0000 olacaktır.

Bit düzeyinde tümleme operatörü, yaklaşık işareti (~) ile gösterilir.

Bitsel tümleme operatörünün uygulanmasını gösteren bir program yazalım.

#include int main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}

Çıktı:

Complement - Value of c is -11

İşte şimdiye kadar tartışılan tüm operatoların bir örneğini içeren başka bir program:

#include main() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

Programı derleyip çalıştırdıktan sonra aşağıdaki sonucu verir:

Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12

Özet

  • Bitsel operatörler, 'C' tarafından sağlanan özel operatör setidir.
  • Bit seviyesi programlamada kullanılırlar.
  • Bu operatörler, bir tamsayı ifadesinin bitlerini işlemek için kullanılır.
  • Mantıksal, kaydırma ve tamamlayıcı, üç tür bitsel operatördür.
  • Bitsel tümleme operatörü, bir ifadenin bitlerini ters çevirmek için kullanılır.