bitwise Operator di C: AND, OR, XOR, Shift & Melengkapi
โก Ringkasan Cerdas
Operator bitwise dalam bahasa C memanipulasi data pada tingkat bit individual, menggunakan operasi AND, OR, XOR, komplemen, dan pergeseran pada operan bilangan bulat untuk melakukan perhitungan yang lebih cepat, mengemas flag, dan mengontrol perangkat keras dalam pemrograman tingkat rendah dan tertanam.

Apa itu Bitwise Operator?
bitwise OperaOperator bitwise digunakan untuk memanipulasi data pada tingkat bit, yang juga disebut pemrograman tingkat bit. Operator bitwise beroperasi pada satu atau lebih pola bit atau angka biner pada tingkat bit individualnya. Operator ini digunakan dalam komputasi numerik untuk mempercepat proses perhitungan.
Berikut ini adalah daftar operator bitwise yang disediakan oleh bahasa pemrograman 'C':
| Operator | Arti |
|---|---|
| & | Operator DAN Bitwise |
| | | Operator ATAU Bitwise |
| ^ | Operator eksklusif bitwise ATAU |
| ~ | Komplemen Biner Satu Operator adalah operator unary |
| << | Operator shift kiri |
| >> | Operator shift kanan |
Operator bitwise tidak dapat diterapkan secara langsung pada tipe data primitif seperti float, double, dll. Selalu ingat satu hal bahwa operator bitwise sebagian besar digunakan dengan... tipe data bilangan bulat karena kompatibilitasnya.
Operator logika bitwise bekerja pada data bit per bit, dimulai dari bit paling tidak penting, yakni bit LSB yang merupakan bit paling kanan, menuju ke MSB (Most Significant Bit) yang merupakan bit paling kiri.
Hasil perhitungan operator logika bitwise ditunjukkan pada tabel di bawah ini.
| x | y | x & y | x | kamu | x^y |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
Bitwise DAN
Ini adalah salah satu operator logika bitwise yang paling umum digunakan. Operator ini dilambangkan dengan satu tanda ampersand (&). Dua ekspresi integer ditulis di setiap sisi operator (&).
Hasil operasi AND bitwise adalah 1 jika kedua bit bernilai 1; jika tidak, hasilnya selalu 0.
Misalkan kita mempunyai 2 variabel op1 dan op2 dengan nilai sebagai berikut:
Op1 = 0000 1101 Op2 = 0001 1001
Hasil dari operasi AND pada variabel op1 dan op2 adalah
Result = 0000 1001
Seperti yang bisa kita lihat, dua variabel dibandingkan sedikit demi sedikit. Kapanpun nilai bit pada kedua variabel adalah 1, maka hasilnya adalah 1 atau 0.
Bitwise ATAU
Diwakili oleh satu tanda batang vertikal (|). Dua ekspresi bilangan bulat ditulis pada setiap sisi operator (|).
Hasil operasi bitwise OR adalah 1 jika setidaknya satu ekspresi bernilai 1; jika tidak, hasilnya selalu 0.
Misalkan kita mempunyai 2 variabel op1 dan op2 dengan nilai sebagai berikut:
Op1 = 0000 1101 Op2 = 0001 1001
Hasil operasi OR pada variabel op1 dan op2 adalah
Result = 0001 1101
Seperti yang bisa kita lihat, dua variabel dibandingkan sedikit demi sedikit. Kapanpun nilai bit pada salah satu variabel adalah 1, maka hasilnya akan menjadi 1 atau 0.
Bitwise Eksklusif ATAU
Dilambangkan dengan simbol (^). Dua ekspresi bilangan bulat ditulis di setiap sisi operator (^).
Hasil operasi Eksklusif-ATAU bitwise adalah 1 jika hanya satu ekspresi yang bernilai 1; jika tidak, hasilnya selalu 0.
Misalkan kita mempunyai 2 variabel op1 dan op2 dengan nilai sebagai berikut:
Op1 = 0000 1101 Op2 = 0001 1001
Hasil operasi XOR pada variabel op1 dan op2 adalah
Result = 0001 0100
Seperti yang bisa kita lihat, dua variabel dibandingkan sedikit demi sedikit. Jika hanya satu variabel yang bernilai 1 maka hasilnya adalah 0, jika tidak maka hasilnya adalah 0.
Mari kita menulis program sederhana yang menunjukkan operator logika bitwise.
#include <stdio.h> 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(); }
Keluaran:
AND - Value of c is 20 OR - Value of c is 21 Exclusive-OR - Value of c is 1
Operator pergeseran bitwise
Operator pergeseran bitwise digunakan untuk memindahkan/menggeser pola bit ke sisi kiri atau kanan. Kiri dan kanan adalah dua operator pergeseran yang disediakan oleh 'C' yang direpresentasikan sebagai berikut:
Operand << n (Left Shift) Operand >> n (Right Shift)
Di sini,
- operan adalah ekspresi bilangan bulat yang harus kita gunakan untuk melakukan operasi shift.
- 'n' adalah jumlah total posisi bit yang harus kita geser dalam ekspresi bilangan bulat.
Operasi pergeseran kiri akan menggeser jumlah bit 'n' ke sisi kiri. Bit paling kiri dalam ekspresi akan dimunculkan, dan n bit dengan nilai 0 akan diisi di sisi kanan.
Operasi shift kanan akan menggeser jumlah bit 'n' ke sisi kanan. Bit 'n' paling kanan dalam ekspresi akan muncul, dan nilai 0 akan diisi di sisi kiri.
Contoh: x adalah ekspresi bilangan bulat dengan data 1111. Setelah melakukan operasi shift hasilnya adalah:
x << 2 (left shift) = 1111<<2 = 1100 x>>2 (right shift) = 1111>>2 = 0011
ShiftOperator s dapat digabungkan kemudian dapat digunakan untuk extracMari kita tulis program untuk mendemonstrasikan penggunaan operator pergeseran bitwise.
#include <stdio.h> 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; }
Keluaran:
Left shift - Value of c is 80 Right shift - Value of c is 5
Setelah melakukan operasi shift kiri nilainya akan menjadi 80 yang setara binernya adalah 101000.
Setelah melakukan operasi shift ke kanan, nilainya akan menjadi 5 yang ekuivalen binernya adalah 000101.
Operator pelengkap bitwise
Komplemen bitwise juga disebut sebagai operator komplemen satu karena hanya mengambil satu nilai atau satu operan. Operator ini adalah operator unary.
Saat kita melakukan komplemen pada bit mana pun, semua angka 1 menjadi 0 dan sebaliknya.
Jika kita mempunyai suatu ekspresi integer yang berisi 0000 1111 maka setelah melakukan operasi komplemen bitwise nilainya akan menjadi 1111 0000.
Operator komplemen bitwise dilambangkan dengan simbol tilde (~).
Mari kita tulis program yang menunjukkan penerapan operator komplemen bitwise.
#include <stdio.h> int main() { int a = 10; /* 10 = 1010 */ int c = 0; c = ~(a); printf("Complement - Value of c is %d\n", c ); return 0; }
Keluaran:
Complement - Value of c is -11
Berikut adalah program lain, dengan contoh semua operator yang telah dibahas sejauh ini:
#include <stdio.h> 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; /*-49 = 11001111 */ 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 );}
Setelah kita mengkompilasi dan menjalankan program tersebut, maka akan menghasilkan hasil sebagai berikut:
Bitwise AND Operator - x & y = 0 Bitwise OR Operator - x | y = 61 Bitwise XOR Operator- x^y= 61 Bitwise One's Complement Operator - ~x = -49 Bitwise Left Shift Operator x << 2= 192 Bitwise Right Shift Operator x >> 2= 12
