Menguasai Operator Bitwise dalam C: AND, OR, XOR, Shift & Komplement
Apa itu Operator Bitwise?
Operator bitwise memanipulasi bit individual dari nilai integer. Tidak seperti operator aritmatika yang bekerja pada bilangan bulat, operator bitwise bertindak pada representasi biner, menjadikannya ideal untuk tugas kritis kinerja seperti flag, bit mask, dan kontrol perangkat tingkat rendah.
Dalam C, operator bitwise yang tersedia adalah:
| Operator | Arti |
| & | Bitwise AND |
| | | Bitwise OR |
| ^ | Bitwise XOR (exclusive OR) |
| ~ | Bitwise NOT (one’s complement) |
| << | Left shift |
| >> | Right shift |
Operator bitwise hanya didefinisikan untuk tipe integral; tidak berlaku untuk tipe floating-point seperti float atau double.
Operasi dimulai dari bit least significant (LSB) dan melanjutkan ke most significant bit (MSB). Tabel kebenaran berikut meringkas hasil biner:
Operand x | Operand 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 |
Dalam bagian-bagian berikut kita akan membahas lebih dalam setiap operator dengan contoh.
Bitwise AND (&)
Operator AND mengembalikan 1 hanya ketika kedua bit yang bersesuaian adalah 1; jika tidak hasilnya adalah 0. Biasa digunakan untuk menyaring bit yang tidak diinginkan.
Op1 = 0000 1101 Op2 = 0001 1001 Result = 0000 1001
Bitwise OR (|)
Operator OR mengembalikan 1 jika setidaknya satu bit adalah 1. Berguna untuk menetapkan bit tertentu.
Op1 = 0000 1101 Op2 = 0001 1001 Result = 0001 1101
Bitwise XOR (^)
Operator XOR mengembalikan 1 hanya ketika bit berbeda. Berguna untuk mengubah bit.
Op1 = 0000 1101 Op2 = 0001 1001 Result = 0001 0100
Contoh program:
#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 - c = %d\n", c); c = a | b; /* 21 = 010101 */ printf("OR - c = %d\n", c); c = a ^ b; /* 1 = 000001 */ printf("XOR - c = %d\n", c); return 0; } Output:
AND - c = 20 OR - c = 21 XOR - c = 1
Operator Bitwise Shift (<< dan >>)
Operator shift memindahkan bit ke kiri atau kanan dengan jumlah tertentu.
operand << n – bergeser ke kiri, memasukkan nol di kanan. operand >> n – bergeser ke kanan, memasukkan nol di kiri.
Contoh dengan bilangan 4-bit 1111:
x << 2 → 1100 x >> 2 → 0011
Ilustrasi program:
#include <stdio.h> int main() { int a = 20; /* 20 = 010100 */ int c = 0; c = a << 2; /* 80 = 101000 */ printf("Left shift - c = %d\n", c); c = a >> 2; /* 5 = 000101 */ printf("Right shift - c = %d\n", c); return 0; } Output:
Left shift - c = 80 Right shift - c = 5
Bitwise Complement (~)
Operator komplement membalik setiap bit: 1 menjadi 0 dan sebaliknya. Ini adalah operator unary yang diterapkan pada satu operand.
0000 1111 → 1111 0000
Contoh program:
#include <stdio.h> int main() { int a = 10; /* 10 = 001010 */ int c = ~a; /* -11 in two’s complement */ printf("Complement - c = %d\n", c); return 0; } Output:
Complement - c = -11
Semua Operator Bersama
Berikut adalah program ringkas yang menunjukkan setiap operator bitwise yang dibahas.
#include <stdio.h> int main() { unsigned int x = 48; /* 0011 0000 */ unsigned int y = 13; /* 0000 1101 */ int z = 0; z = x & y; /* 0 = 0000 0000 */ printf("AND - x & y = %d\n", z); z = x | y; /* 61 = 0011 1101 */ printf("OR - x | y = %d\n", z); z = x ^ y; /* 61 = 0011 1101 */ printf("XOR - x ^ y = %d\n", z); z = ~x; /* -49 = 1111 0100 (two’s complement) */ printf("NOT - ~x = %d\n", z); z = x << 2; /* 192 = 1100 0000 */ printf("Left shift - x << 2 = %d\n", z); z = x >> 2; /* 12 = 0000 1100 */ printf("Right shift - x >> 2 = %d\n", z); return 0; } Result:
AND - x & y = 0 OR - x | y = 61 XOR - x ^ y = 61 NOT - ~x = -49 Left shift - x << 2 = 192 Right shift - x >> 2 = 12
Poin Utama
- Operator bitwise eksklusif untuk tipe integer dan beroperasi pada tingkat biner.
- Mereka mencakup operasi logika (AND, OR, XOR), shift (kiri/kanan), dan komplement (~).
- Operator ini tak tergantikan untuk tugas seperti manipulasi flag, I/O tingkat rendah, dan kode kritis kinerja.