Kadang data diolah sampai ke tingkat bit, bukan sekadar angka utuh. Kombinasi opsi (flag), format penyimpanan ringkas, dan protokol jaringan semuanya menggabungkan bit secara langsung. Operator bitwise melayani kebutuhan itu: operator mengoperasikan setiap bit dari bilangan integer satu per satu.
Empat Operator Bitwise #
| Operator | Nama | Aturan per bit |
|---|---|---|
& | Bitwise AND | 1 hanya bila kedua bit bernilai 1 |
| | Bitwise OR | 1 bila salah satu bit bernilai 1 |
^ | Bitwise XOR | 1 hanya bila kedua bit berbeda |
~ | Bitwise NOT | Membalik setiap bit: 1 menjadi 0, 0 menjadi 1 |
Membaca Pola Biner #
Hasil bitwise sulit dibaca dalam bentuk desimal, sehingga kita memakai Convert.ToString(nilai, 2) untuk menampilkan bilangan sebagai string biner. Method PadLeft(8, '0') menambah angka nol di depan agar setiap pola berukuran sama, delapan digit.
int a = 12; // biner 1100
int b = 10; // biner 1010
Console.WriteLine($"a = {Convert.ToString(a, 2).PadLeft(8, '0')}");
Console.WriteLine($"b = {Convert.ToString(b, 2).PadLeft(8, '0')}");
Console.WriteLine($"a & b = {Convert.ToString(a & b, 2).PadLeft(8, '0')} -> {a & b}");
Console.WriteLine($"a | b = {Convert.ToString(a | b, 2).PadLeft(8, '0')} -> {a | b}");
Console.WriteLine($"a ^ b = {Convert.ToString(a ^ b, 2).PadLeft(8, '0')} -> {a ^ b}");
Console.WriteLine($"~a = {~a}");
int opsiBaca = 0b0000_0101;
Console.WriteLine(opsiBaca & 0b0000_0100);
Console.WriteLine(Convert.ToString(opsiBaca | 0b0000_0010, 2).PadLeft(8, '0'));
Console.WriteLine(opsiBaca | 0b0000_0010);Output yang Dihasilkan:
a = 00001100
b = 00001010
a & b = 00001000 -> 8
a | b = 00001110 -> 14
a ^ b = 00000110 -> 6
~a = -13
4
00000111
7Mari kita telaah baris demi baris:
- Baris 1-2 (
a,b): Variabelamenyimpan 12 (00001100dalam biner) danbmenyimpan 10 (00001010). a & b: Kedua pola dibandingkan bit demi bit; hanya bit keempat dari kanan yang sama-sama1, sehingga hasilnya00001000atau desimal8.a | b: Setiap posisi yang memuat minimal satu1menjadi1; hasilnya00001110atau desimal14.a ^ b: Setiap posisi dengan bit berbeda menjadi1; hasilnya00000110atau desimal6.~a: Semua 32 bit milikadibalik; hasilnya desimal-13.opsiBaca & 0b0000_0100: VariabelopsiBacaberisi00000101; operasi&menghasilkan4(bukan nol), artinya bit ketiga menyala.opsiBaca | 0b0000_0010: Operasi|menyalakan bit kedua tanpa mengubah bit lain; pola menjadi00000111atau desimal7.
Pola Umum: Flag Opsi #
Bitwise sering dipakai untuk menata flag: setiap bit pada satu integer mewakili satu opsi yang menyala atau mati. Nilai hakAkses = 0b0000_0101 berarti opsi pada bit pertama dan bit ketiga aktif. Expression hakAkses & 0b0000_0100 menghasilkan bukan-nol ketika bit ketiga menyala, sehingga pengecekan satu opsi cukup dengan satu operasi &. Operator | berperan sebaliknya: menggabungkan beberapa opsi menjadi satu nilai, misalnya opsiA | opsiB.