Operator C ++ Bitwise

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

Di C ++, operator bitwise melakukan operasi pada data integer pada level bit individu. Operasi ini mencakup pengujian, pengaturan, atau pengalihan bit aktual. Sebagai contoh,

 a & b; a | b;

Berikut adalah daftar 6 operator bitwise termasuk dalam C ++.

Operator Deskripsi
& Bitwise AND Operator
| Bitwise ATAU Operator
^ Operator Bitwise XOR
~ Operator Pelengkap Bitwise
<< Operator Kiri Bitwise Shift
>> Operator Kanan Bitwise Shift

Operator ini diperlukan karena Arithmetic-Logic Unit (ALU) yang ada di CPU komputer melakukan operasi aritmatika pada tingkat bit.

Catatan: Operator Bitwise hanya dapat digunakan bersama chardan inttipe data.

1. C ++ Bitwise AND Operator

Operator bitwise AND & mengembalikan 1 jika dan hanya jika kedua operannya adalah 1 . Jika tidak, ini mengembalikan 0 .

Tabel berikut menunjukkan cara kerja operator DAN bitwise . Misalkan a dan b adalah dua operan yang hanya dapat mengambil nilai biner yaitu 1 dan 0 .

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

Catatan: Tabel di atas dikenal sebagai "Tabel Kebenaran" untuk operator DAN bitwise .

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

 12 = 00001100 (Dalam Biner) 25 = 00011001 (Dalam Biner) // Bitwise AND Operasi 12 dan 25 00001100 & 00011001 _________ 00001000 = 8 (Dalam desimal)

Contoh 1: Bitwise 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; )

Keluaran

 a = 12 b = 25 a & b = 8

Dalam contoh di atas, kami telah mendeklarasikan dua variabel a dan b. Di sini, perhatikan barisnya,

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

Di sini, kami melakukan bitwise AND antara variabel a dan b.

2. C ++ Bitwise ATAU Operator

Operator bitwise OR | mengembalikan 1 jika setidaknya salah satu operan adalah 1 . Jika tidak, ini mengembalikan 0 .

Tabel kebenaran berikut menunjukkan cara kerja operator OR bitwise . Misalkan a dan b adalah dua operan yang hanya dapat mengambil nilai biner yaitu 1 atau 0 .

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

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

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

Contoh 2: Bitwise OR

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

Keluaran

a = 12 b = 25 a | b = 29

The bitwise OR dari a = 12dan b = 25memberi 29.

3. Operator C ++ Bitwise XOR

Operator bitwise XOR ^ mengembalikan 1 jika dan hanya jika salah satu operannya adalah 1 . Namun, jika kedua operan adalah 0 , atau jika keduanya 1 , maka hasilnya 0 .

Tabel kebenaran berikut menunjukkan cara kerja operator XOR bitwise . Misalkan a dan b adalah dua operan yang hanya dapat mengambil nilai biner yaitu 1 atau 0 .

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

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

 12 = 00001100 (Dalam Biner) 25 = 00011001 (Dalam Biner) Operasi Bitwise XOR 12 dan 25 00001100 00011001 _________ 00010101 = 21 (Dalam desimal)

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

Keluaran

 a = 12 b = 25 a b = 21

The bitwise XOR dari a = 12dan b = 25memberi 21.

4. Operator Pelengkap Bitwise C ++

Operator pelengkap bitwise adalah operator unary (bekerja hanya pada satu operan). Ini dilambangkan dengan ~perubahan angka biner 1 menjadi 0 dan 0 menjadi 1 .

Pelengkap Bitwise

Penting untuk dicatat bahwa bitwise komplemen dari setiap bilangan bulat N sama dengan - (N + 1) . Sebagai contoh,

Pertimbangkan bilangan bulat 35 . Sesuai aturan, pelengkap bitwise dari 35 harus - (35 + 1) = -36 . Sekarang, mari kita lihat apakah kita mendapatkan jawaban yang benar 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 >>.

Saat kita menggeser angka apa pun ke kanan, bit yang paling tidak signifikan dibuang, sedangkan bit paling signifikan diganti dengan nol.

Shift Kanan satu bit

Seperti yang bisa kita lihat dari gambar di atas, kita memiliki bilangan 4-bit . Ketika kita melakukan operasi pergeseran kanan satu-bit padanya, setiap bit individu digeser ke kanan sebanyak 1 bit.

Akibatnya, bit paling kanan dibuang, sedangkan bit paling kiri tetap kosong. Lowongan ini diganti dengan 0 .

6. Operator Pergeseran Kiri C ++

The Operator shift kiri bergeser semua bit ke arah kiri dengan sejumlah bit tertentu . Ini dilambangkan dengan <<.

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 pergeseran kiri bitwise untuk 13 (dan angka lainnya) dapat berbeda tergantung pada jumlah bit yang direpresentasikan olehnya.

Karena pada representasi 32-bit , terdapat lebih banyak bit yang dapat digeser ke kiri jika dibandingkan dengan representasi 4-bit .

Artikel yang menarik...