Mengoperasikan setiap bit biner dari angka, hanya digunakan bersama bilangan bulat saja
Tabel operator bit dan operator pergeseran
| Operator | Nama | Aturan Operasi |
|---|---|---|
& | Bitwise AND | Bit hasil bernilai 1 hanya jika bit biner pasangan sama-sama bernilai 1, selain itu bernilai 0 |
| | | Bitwise OR | Bit hasil bernilai 1 jika salah satu bit biner pasangan bernilai 1, selain itu bernilai 0 |
^ | Bitwise XOR | Bit hasil bernilai 1 jika bit biner pasangan berbeda nilai, jika sama bernilai 0 |
~expr | Bitwise NOT (operator unari) | Semua bit biner dibalik 0 ↔ 1, 0 jadi 1 dan 1 jadi 0 |
<< | Pergeseran Kiri Shift left | Seluruh urutan bit biner digeser ke kiri sebanyak N posisi, bagian kanan diisi angka 0 |
>> | Pergeseran Kanan Bertanda Shift right | Seluruh bit biner digeser ke kanan N posisi, sisi kiri diisi bit tanda (angka positif isi 0, angka negatif isi 1) |
>>> | Pergeseran Kanan Tanpa Tanda Unsigned shift right | Bit biner digeser kanan N posisi, sisi kiri selalu diisi 0; angka negatif akan diubah dulu menjadi bilangan bulat 32-bit tanpa tanda sebelum digeser |
Operator Bitwise AND (&)
Bit hasil bernilai 1 hanya jika dua bit pasangan sama-sama 1; jika salah satunya 0, hasil bit adalah 0.
| Bit angka pertama | Bit angka kedua | Hasil Operasi |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
Contoh
void main() {
// Uji operasi bit tunggal
assert((1 & 1) == 1);
assert((1 & 0) == 0);
assert((0 & 1) == 0);
assert((0 & 0) == 0);
// Contoh bilangan bulat multi-bit
final a = 0x22; // Biner 00100010
final b = 0x0f; // Biner 00001111
assert((a & b) == 0x02); // Hasil 00000010
}Code language: PHP (php)
Operator Bitwise OR (|)
Bit hasil bernilai 1 jika salah satu dari dua bit pasangan bernilai 1; jika keduanya 0 baru hasil 0.
| Bit angka pertama | Bit angka kedua | Hasil Operasi |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
void main() {
// Uji operasi bit tunggal
assert((1 | 1) == 1);
assert((1 | 0) == 1);
assert((0 | 1) == 1);
assert((0 | 0) == 0);
// Contoh bilangan bulat multi-bit
final a = 0x22; // Biner 00100010
final b = 0x0f; // Biner 00001111
assert((a | b) == 0x2f); // Hasil 00101111
}Code language: PHP (php)
Operator Bitwise XOR (^)
Bit hasil bernilai 1 jika dua bit pasangan memiliki nilai berbeda; jika nilainya sama hasilnya 0.
| Bit angka pertama | Bit angka kedua | Hasil Operasi |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
Contoh
void main() {
// Uji operasi bit tunggal
assert((1 ^ 1) == 0);
assert((1 ^ 0) == 1);
assert((0 ^ 1) == 1);
assert((0 ^ 0) == 0);
// Contoh bilangan bulat multi-bit
final a = 0x22; // Biner 00100010
final b = 0x0f; // Biner 00001111
assert((a ^ b) == 0x2d); // Hasil 00101101
}Code language: PHP (php)
Operator Bitwise NOT (~)
Operator unari, hanya butuh satu operand, membalik setiap bit biner satu per satu: 0 menjadi 1, 1 menjadi 0.
| Bit awal | Bit hasil inversi |
|---|---|
| 1 | 0 |
| 0 | 1 |
Contoh
void main() {
// Uji operasi bit tunggal
assert((~1 & 1) == 0);
assert((~0 & 1) == 1);
// Contoh bilangan bulat multi-bit
final a = 0x22; // Biner 00100010
final mask = 0x0f; // Biner 00001111
assert((a & ~mask) == 0x20); // Invers mask lalu AND dengan a, hapus 4 bit rendah
}Code language: PHP (php)
Lihat contoh lengkap
void main() {
// Definisi nilai uji
final value = 0x22; // Heksadesimal 0x22 = desimal 34, biner 00100010
final bitmask = 0x0f; // Heksadesimal 0x0f = desimal 15, biner 00001111
// 1. Bitwise AND &
print('value & bitmask = ${value & bitmask}'); // 0x02 = 2
assert((value & bitmask) == 0x02);
// 2. AND dengan mask terbalik (& ~mask sering dipakai bersihkan bit rendah)
print('value & ~bitmask = ${value & ~bitmask}'); // 0x20 = 32
assert((value & ~bitmask) == 0x20);
// 3. Bitwise OR |
print('value | bitmask = ${value | bitmask}'); // 0x2f = 47
assert((value | bitmask) == 0x2f);
// 4. Bitwise XOR ^
print('value ^ bitmask = ${value ^ bitmask}'); // 0x2d = 45
assert((value ^ bitmask) == 0x2d);
// 5. Pergeseran kiri <<
print('value << 4 = ${value << 4}'); // 0x220 = 544
assert((value << 4) == 0x220);
// 6. Pergeseran kanan bertanda >> (angka positif)
print('value >> 4 = ${value >> 4}'); // 0x02 = 2
assert((value >> 4) == 0x02);
// 7. Pergeseran kanan bertanda >> (angka negatif, perilaku berbeda antar platform)
print('-value >> 4 = ${-value >> 4}'); // -0x03 = -3
assert((-value >> 4) == -0x03);
// 8. Pergeseran kanan tanpa tanda >>> (angka positif, Dart2.14+)
print('value >>> 4 = ${value >>> 4}'); // 0x02 = 2
assert((value >>> 4) == 0x02);
// 9. Pergeseran kanan tanpa tanda >>> (angka negatif, hasil selalu lebih dari 0)
print('-value >>> 4 = ${-value >>> 4}');
assert((-value >>> 4) > 0);
}Code language: PHP (php)
Hasil eksekusi
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
value & bitmask = 2
value & ~bitmask = 32
value | bitmask = 47
value ^ bitmask = 45
value << 4 = 544
value >> 4 = 2
-value >> 4 = -3
value >>> 4 = 2
-value >>> 4 = 1152921504606846973
Pembahasan contoh satu per satu
1 Bitwise AND
00100010
00001111
--------
00000010
Hasil akhir adalah 00000010, yaitu bilangan desimal 2.
2 Bitwise AND dengan mask terbalik & ~mask
00100010
11110000 // ~00001111
---------
00100000 // 0x20 = 32Code language: JavaScript (javascript)
Angka 11110000 adalah hasil dari ~mask yaitu inversi dari 00001111: semua bit 0 jadi 1 dan 1 jadi 0
3 Bitwise OR |
00100010
00001111
---------
00101111 // 0x2f = 47Code language: JavaScript (javascript)
Hasil bit 1 jika ada salah satu bit bernilai 1, hanya jika keduanya 0 hasilnya 0
4 Bitwise XOR ^
00100010
00001111
---------
00101101 // 0x2d = 45Code language: JavaScript (javascript)
Hasil bit 1 jika bit atas dan bawah berbeda, jika sama hasil 0
5 Pergeseran kiri << 4
00100010 << 4 = 001000100000
Hasil: 0x220 = 544
6 Pergeseran kanan bertanda >> 4 (bilangan positif)
00100010 >> 4 = 00000010
Hasil: 0x02 = 2
7 Pergeseran kanan bertanda >> 4 (bilangan negatif)
-00100010 >> 4 = -00000011
Hasil: -0x03 = -3
8 Pergeseran kanan tanpa tanda >>> 4 (bilangan positif)
00100010 >>> 4 = 00000010
Hasil: 0x02 = 2
9 Pergeseran kanan tanpa tanda >>> 4 (bilangan negatif)
-00100010 >>> 4 = (sisi kiri isi 0) 00001101... // hasil pasti lebih dari 0Code language: JavaScript (javascript)