C ++ Bitsel Operatörler

Bu eğitimde, örnekler yardımıyla C ++ 'daki bitsel operatörler hakkında bilgi edineceğiz.

C ++ 'da bitsel operatörler, ayrı bit seviyesinde tamsayı verileri üzerinde işlemler gerçekleştirir. Bu işlemler, gerçek bitlerin test edilmesini, ayarlanmasını veya değiştirilmesini içerir. Örneğin,

 a & b; a | b;

C ++ 'da bulunan 6 bitsel işlecin listesi aşağıda verilmiştir.

Şebeke Açıklama
& Bitsel AND İşleci
| Bitsel VEYA İşleci
^ Bitsel XOR Operatörü
~ Bitsel Tamamlama Operatörü
<< Bit Düzeyinde Sol İşleci Kaydırma
>> Bit Düzeyinde Sağa Kaydırma Operatörü

Bu operatörler gereklidir, çünkü bilgisayarın CPU'sunda bulunan Aritmetik-Mantık Birimi (ALU) bit seviyesinde aritmetik işlemler gerçekleştirir.

Not: Bitsel operatörler yalnızca charve intveri türleriyle birlikte kullanılabilir .

1. C ++ Bitsel VE İşleci

Lojik AND & operatörü döner 1 hem işlenenlerdir ancak ve ancak 1 . Aksi takdirde 0 döndürür .

Aşağıdaki tablo, bitsel AND operatörünün çalışmasını gösterir. A ve b , yalnızca ikili değerleri, yani 1 ve 0 alabilen iki işlenen olsun .

a b a & b
0 0 0
0 1 0
1 0 0
1 1 1

Not: Yukarıdaki tablo, bitsel AND operatörü için "Doğruluk Tablosu" olarak bilinir .

İki tam sayı 12 ve 25'in bitsel AND işlemine bir göz atalım :

 12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) // Bitsel AND İşlemi 12 ve 25 00001100 & 00011001 _________ 00001000 = 8 (Ondalık olarak)

Örnek 1: Bitsel AND

 #include using namespace std; int main() ( // declare variables int a = 12, b = 25; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a & b = " << (a & b) << endl; return 0; )

Çıktı

 a = 12 b = 25 a & b = 8

Yukarıdaki örnekte, a ve b olmak üzere iki değişken tanımladık. Burada, çizgiye dikkat edin,

 cout << "a & b = " << (a & b) << endl;

Burada, a ve b değişkenleri arasında bitsel AND işlemi yapıyoruz .

2. C ++ Bitsel YA DA İşleci

Bitdüzeyi VEYA | operatör döner 1 işlenen en az birinin ise 1 . Aksi takdirde 0 döndürür .

Aşağıdaki doğruluk tablosu, bitsel OR operatörünün çalışmasını gösterir. A ve b , yalnızca ikili değerleri, yani 1 veya 0 alabilen iki işlenen olsun .

a b a | b
0 0 0
0 1 1
1 0 1
1 1 1

İki tam sayı 12 ve 25'in bitsel OR işlemine bakalım :

12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) Bitsel VEYA 12 ve 25 İşlemleri 00001100 | 00011001 _________ 00011101 = 29 (Ondalık olarak)

Örnek 2: Bitsel VEYA

 #include int main() ( int a = 12, b = 25; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a | b = " << (a | b) << endl; return 0; )

Çıktı

a = 12 b = 25 a | b = 29

Bitsel VEYA ait a = 12ve b = 25verir 29.

3. C ++ Bitsel XOR Operatörü

Bit tabanlı XOR ^ operatörü döndüren 1 ve işlenenlerden yalnızca biri olup olmadığını 1 . Bununla birlikte, her iki işlenen de 0 ise veya her ikisi de 1 ise , sonuç 0 olur .

Aşağıdaki doğruluk tablosu, bitsel XOR operatörünün çalışmasını gösterir. A ve b , yalnızca ikili değerleri, yani 1 veya 0 alabilen iki işlenen olsun .

a b a b
0 0 0
0 1 1
1 0 1
1 1 0

İki tam sayı 12 ve 25'in bit tabanlı XOR işlemine bakalım :

 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; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a b = " << (a b) << endl; return 0; )

Çıktı

 a = 12 b = 25 a b = 21

Bitsel XOR ait a = 12ve b = 25verir 21.

4. C ++ Bitsel Tamamlayıcı İşleci

Bitsel tümleme operatörü, tekli bir operatördür (yalnızca bir işlenen üzerinde çalışır). Tarafından Bu ifade edilir ~bu ikili basamak değiştiren 1 için 0 ve 0 ile 1 .

Bitsel Tamamlayıcı

Herhangi bir N tamsayısının bitsel tamamlamasının - (N + 1) 'e eşit olduğuna dikkat etmek önemlidir . Örneğin,

35 tamsayısını düşünün . Kural gereği, bit cinsinden tamamlayıcı 35 olmalıdır - (35 + 1) = -36 . Şimdi doğru cevabı alıp almadığımızı görelim.

 35 = 00100011 (In Binary) // Using bitwise complement operator ~ 00100011 __________ 11011100

In the above example, we get that the bitwise complement of 00100011 (35) is 11011100. Here, if we convert the result into decimal we get 220.

However, it is important to note that we cannot directly convert the result into decimal and get the desired output. This is because the binary result 11011100 is also equivalent to -36.

To understand this we first need to calculate the binary output of -36. We use 2's complement to calculate the binary of negative integers.

2's Complement

The 2's complement of a number N gives -N.

In binary arithmetic, 1's complement changes 0 to 1 and 1 to 0.

And, if we add 1 to the result of the 1's complement, we get the 2's complement of the original number.

For example,

 36 = 00100100 (In Binary) 1's Complement = 11011011 2's Complement : 11011011 + 1 _________ 11011100 

Here, we can see the 2's complement of 36 (i.e. -36) is 11011100. This value is equivalent to the bitwise complement of 35 that we have calculated in the previous section.

Hence, we can say that the bitwise complement of 35 = -36.

Example 4: Bitwise Complement

 #include int main() ( int num1 = 35; int num2 = -150; cout << "~(" << num1 << ") = " << (~num1) << endl; cout << "~(" << num2 << ") = " << (~num2) << endl; return 0; )

Output

 ~(35) = -36 ~(-150) = 149

In the above example, we declared two integer variables num1 and num2, and initialized them with the values of 35 and -150 respectively.

We then computed their bitwise complement with the codes (~num1) and (~num2) respectively and displayed them on the screen.

 The bitwise complement of 35 = - (35 + 1) = -36 i.e. ~35 = -36 The bitwise complement of -150 = - (-150 + 1) = - (-149) = 149 i.e. ~(-150) = 149

This is exactly what we got in the output.

C++ Shift Operators

There are two shift operators in C++ programming:

  • Right shift operator >>
  • Left shift operator <<

5. C++ Right Shift Operator

The right shift operator shifts all bits towards the right by a certain number of specified bits. It is denoted by >>.

Herhangi bir sayıyı sağa kaydırdığımızda, en önemsiz bitler atılırken en önemli bitler sıfırlarla değiştirilir.

bir bit Sağ Kaydırma

Yukarıdaki görselden de görebileceğimiz gibi 4 bitlik bir sayımız var . Üzerinde bir bitlik sağa kaydırma işlemi yaptığımızda , her bir bit 1 bit sağa kaydırılır.

Sonuç olarak, en sağdaki bit atılırken en soldaki bit boş kalır. Bu boşluk 0 ile değiştirilir .

6. C ++ Sol Kaydırma Operatörü

Sol kaydırma operatörün belirli bir sayısına göre sola doğru tüm bitleri kaydırır belirlenen bit . İle gösterilir <<.

bir bit Sol Kaydırma

As we can see from the image above, we have a 4-bit number. When we perform a 1 bit left shift operation on it, each individual bit is shifted to the left by 1 bit.

As a result, the left-most bit is discarded, while the right-most bit remains vacant. This vacancy is replaced by a 0.

Example 5: Shift Operators

 #include int main() ( // declaring two integer variables int num = 212, i; // Shift Right Operation cout << "Shift Right:" << endl; // Using for loop for shifting num right from 0 bit to 3 bits for (i = 0; i < 4; i++) ( cout <> " << i << " = " <> i) << endl; ) // Shift Left Operation cout << "Shift Left:" << endl; // Using for loop for shifting num left from 0 bit to 3 bits for (i = 0; i < 4; i++) ( cout << "212 << " << i << " = " << (212 << i) << endl; ) return 0; )

Output

 Shift Right: 212>> 0 = 212 212>> 1 = 106 212>> 2 = 53 212>> 3 = 26 Shift Left: 212 << 0 = 212 212 << 1 = 424 212 << 2 = 848 212 << 3 = 1696

From the output of the program above, we can infer that, for any number N, the results of the shift right operator are:

 N>> 0 = N N>> 1 = (N>> 0) / 2 N>> 2 = (N>> 1) / 2 N>> 3 = (N>> 2) / 2

and so on.

Similarly, the results of the shift left operator are:

 N << 0 = N N << 1 = (N << 0) * 2 N << 2 = (N << 1) * 2 N << 3 = (N << 2) * 2

and so on.

Hence we can conclude that,

 N>> m = ( N>> (m-1) ) / 2 N << m = ( N << (m-1) ) * 2

In the above example, note that the int data type stores numbers in 32-bits i.e. an int value is represented by 32 binary digits.

However, our explanation for the bitwise shift operators used numbers represented in 4-bits.

For example, the base-10 number 13 can be represented in 4-bit and 32-bit as:

 4-bit Representation of 13 = 1101 32-bit Representation of 13 = 00000000 00000000 00000000 00001101 

Sonuç olarak, 13 (ve herhangi bir başka sayı) için bitsel sola kaydırma işlemi , temsil ettikleri bit sayısına bağlı olarak farklı olabilir.

Çünkü 32 bit gösterimde, 4 bit gösterime kıyasla sola kaydırılabilen çok daha fazla bit vardır .

Ilginç makaleler...