Pengendali Bitwise C ++

Dalam tutorial ini, kita akan belajar mengenai operator bitwise di C ++ dengan bantuan contoh.

Dalam C ++, pengendali bitwise melakukan operasi pada data integer pada tahap bit individu. Operasi ini merangkumi pengujian, penetapan, atau pengalihan bit sebenar. Sebagai contoh,

 a & b; a | b;

Berikut adalah senarai 6 operator bitwise yang termasuk dalam C ++.

Pengendali Penerangan
& Bitwise DAN Operator
| Bitwise ATAU Pengendali
^ Pengendali Bitwise XOR
~ Pengendali Pelengkap Bitwise
<< Pengendali Kiri Bitwise Shift
>> Pengendali Kanan Bitwise Shift

Pengendali ini diperlukan kerana Arithmetic-Logic Unit (ALU) yang terdapat dalam CPU komputer menjalankan operasi aritmetik pada tahap bit.

Catatan: Pengendali Bitwise hanya dapat digunakan bersama chardan intjenis data.

1. C ++ Bitwise DAN Operator

Pengendali bitwise AND & mengembalikan 1 jika dan hanya jika kedua-dua operan adalah 1 . Jika tidak, ia mengembalikan 0 .

Jadual berikut menunjukkan cara kerja operator bitwise AND . Katakan a dan b menjadi dua operan yang hanya boleh mengambil nilai binari iaitu 1 dan 0 .

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

Catatan: Jadual di atas dikenali sebagai "Truth Table" untuk operator bitwise AND .

Mari kita lihat operasi bitwise DAN dua integer 12 dan 25:

 12 = 00001100 (Dalam Binari) 25 = 00011001 (Dalam Binari) // Bitwise DAN Operasi 12 dan 25 00001100 & 00011001 _________ 00001000 = 8 (Dalam perpuluhan)

Contoh 1: Bitwise DAN

 #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; )

Pengeluaran

 a = 12 b = 25 a & b = 8

Dalam contoh di atas, kami telah menyatakan dua pemboleh ubah a dan b. Di sini, perhatikan garis,

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

Di sini, kita melakukan bitwise AND antara pemboleh ubah a dan b.

2. C ++ Bitwise ATAU Operator

Pengendali bitwise ATAU | mengembalikan 1 jika sekurang-kurangnya salah satu operasi adalah 1 . Jika tidak, ia mengembalikan 0 .

Jadual kebenaran berikut menunjukkan cara kerja operator bitwise ATAU . Biarkan a dan b menjadi dua operan yang hanya boleh mengambil nilai binari iaitu 1 atau 0 .

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

Mari kita lihat operasi bitwise ATAU dua bilangan bulat 12 dan 25 :

12 = 00001100 (Dalam Binari) 25 = 00011001 (Dalam Binari) Bitwise ATAU Operasi 12 dan 25 00001100 | 00011001 _________ 00011101 = 29 (Dalam perpuluhan)

Contoh 2: Bitwise ATAU

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

Pengeluaran

a = 12 b = 25 a | b = 29

The bitwise OR daripada a = 12dan b = 25memberikan 29.

3. C ++ Pengendali Bitwise XOR

Pengendali bitor XOR ^ mengembalikan 1 jika dan hanya jika salah satu operasi adalah 1 . Walau bagaimanapun, jika kedua-dua operan adalah 0 , atau jika kedua-duanya adalah 1 , maka hasilnya adalah 0 .

Jadual kebenaran berikut menunjukkan cara pengendali XOR bitwise . Biarkan a dan b menjadi dua operan yang hanya boleh mengambil nilai binari iaitu 1 atau 0 .

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

Marilah kita melihat operasi XOR bitwise dua integer 12 dan 25:

 12 = 00001100 (Dalam Binari) 25 = 00011001 (Dalam Binari) Bitwise XOR Operasi 12 dan 25 00001100 00011001 _________ 00010101 = 21 (Dalam perpuluhan)

Contoh 3: Bitwise XOR

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

Pengeluaran

 a = 12 b = 25 a b = 21

The XOR bitwise daripada a = 12dan b = 25memberikan 21.

4. C ++ Pengendali Pelengkap Bitwise

Pengendali pelengkap bitwise adalah pengendali yang tidak berfungsi (hanya berfungsi pada satu operasi). Ia dilambangkan dengan ~perubahan digit binari 1 hingga 0 dan 0 hingga 1 .

Pelengkap Bitwise

Penting untuk diperhatikan bahawa pelengkap bit bagi mana-mana bilangan bulat N sama dengan - (N + 1) . Sebagai contoh,

Pertimbangkan bilangan bulat 35 . Sesuai peraturan, pelengkap bitwise 35 harus - (35 + 1) = -36 . Sekarang, mari kita lihat sama ada kita mendapat jawapan yang betul atau tidak.

 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 >>.

Apabila kita mengalihkan sebarang nombor ke kanan, bit yang paling tidak penting dibuang, sementara bit yang paling penting digantikan oleh angka nol.

satu bit Shift Kanan

Seperti yang dapat kita lihat dari gambar di atas, kita mempunyai nombor 4-bit . Apabila kita melakukan operasi peralihan kanan satu bit di atasnya, setiap bit individu dialihkan ke kanan sebanyak 1 bit.

Akibatnya, bit paling kanan dibuang, sementara bit paling kiri tetap kosong. Kekosongan ini digantikan dengan 0 .

6. Operator C ++ Shift Kiri

The operator shift kiri beralih semua bit ke arah yang ditinggalkan oleh sebilangan bit dinyatakan . Ia dilambangkan oleh <<.

satu bit Shift Kiri

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 

Akibatnya, operasi peralihan kiri sedikit demi sedikit untuk 13 (dan nombor lain) boleh berbeza bergantung pada jumlah bit yang diwakili olehnya.

Kerana dalam perwakilan 32-bit , ada banyak lagi bit yang dapat dialihkan ke kiri jika dibandingkan dengan perwakilan 4-bit .

Artikel menarik...