Operator Bitwise

Operator Bitwise digunakan untuk memanipulasi bit dari sebuah angka. Bit adalah angka 1 dan 0 yang terdapat dalam bilangan biner. Setiap angka yang disimpan sebagai bilangan biner di memori komputer bisa diubah nilai bitnya dengan menggunakan operator-operator ini. 

Saat menggunakan operator bitwise, bit 0 merepresentasikan nilai false, sebaliknya bit 1 digunakan untuk merepresentasikan nilai true. Ini membuat penggunaan operator bitwise punya kemiripan dengan operator logika.

Operator bitwise umumnya digunakan pada bilangan bulat positif. Jika kalian menggunakannya pada bilangan negatif atau pecahan desimal, hasilnya mungkin akan tidak sesuai keinginan.

Operator-operator bitwise yang ada di dalam bahasa C++, yaitu :

  • >> : shift left
  • << : Shift right
  • & : and
  • | : or
  • ^ : xor
  • ~ : negasi

Operator not termasuk operator unary, yang artinya operator ini hanya butuh satu operand. Operator bitwise lain termasuk operator binary yang membutuhkan 2 operand.

Kalian tidak harus memusingkan cara mengubah bilangan desimal menjadi biner. Kalian bisa memakai kalkulator untuk melakukan konversi bilangan. Jika kalian mau bersusah payah, kalian bisa cari cara konversi manualnya di beberapa buku atau artikel internet. Berikut ini adalah contoh cara perubahan dari bilangan desimal (berbasis 10) menjadi bilangan biner (yang berbasis 2).

Desimal Biner
0 00000000
1 00000001
2 00000010
3 00000011
4 00000100
5 00000101
6 00000110
7 00000111
8 00001000
9 00001001
10 00001010
11 00001011
12 00001100
13 00001101
14 00001110
15 00001111
255 11111111
Contoh kode programnya :
#include <iostream>

using namespace std;
int main(){
    unsigned char a, b;
    unsigned int hasil;
    cout << " a : "; cin >> a;
    cin.ignore();
    cout << " b : "; cin >> b;
    
    cout << "a >> 2 = "<< (a >> 2) << endl;
    cout << "a << 2 = "<< (a << 2) << endl;
    
    hasil=a & b;
    cout << "a & b = "<< hasil << endl;
    hasil=a | b;
    cout << "a | b = "<< hasil << endl;
    hasil=a ^ b;
    cout << "a ^ b = "<< hasil << endl;
    
    hasil = ~a ;
    cout << "~a = "<< hasil << endl;
    hasil= ~b;
    cout << "~b = "<< hasil << endl;
    return 0;
}
Contoh Program :
a : 23
 b : 2
a >> 2 = 12
a << 2 = 200
a & b = 50
a | b = 50
a ^ b = 0
~a = 4294967245
~b = 4294967245

Jika kalian mengubah tipe data variabel hasil, maka hasilnya akan berbeda karena cout mencetak nilai berdasarkan tipe data variabel. Agar hasilnya tetap berupa bilangan positif, sebaiknya kalian gunakan "unsigned" sebelum nama tipe data yang menandakan bahwa tipe datanya hanya berisi bilangan positif.

Operator Not

Operator not digunakan untuk membalikkan nilai masing-masing bit, dari 0 menjadi satu atau sebaliknya. Misalnya :

  • ~ 00001111 => 11110000
  • ~ 10101010 => 01010101
  • ~ 11100111 => 00011000
Perubahan nilai dengan menggunakan operator not tergantung pada tipe datanya. Jika tipe datanya unsigned char yang ukurannya 1 byte, maka hasilnya seperti di atas karena 1 byte terdiri dari 8 bit. Jika tipe datanya long, maka hasilnya akan berbeda karena long ukurannya 4 byte (32 bit). Tipe data int / integer ukurannya bisa relatif berbeda-beda di setiap OS.

Shift Right (>>)

Shift right digunakan untuk menggeser bit ke kiri sebanyak beberapa bit. Bit paling kanan akan dihilangkan sehingga tersisa beberapa bit, dan kemudian ditambah 0 lagi di kiri sebanyak bit yang dihilangkan. Contohnya :

  • 10101010 >> 1 => 1010101 => 01010101
  • 00001111 >> 2 => 000011 => 00000011
  • 11100111 >> 3 => 11100 => 00011100

Shift left ( << )

Shift left adalah operator yang kegunaannya merupakan kebalikan dari shift right. Operator ini menghapus beberapa bit di kiri dan menambahkan bit 0 di sisi kanan sebanyak bit yang dihapus. Contohnya :

  • 10101010 << 1 => 0101010 => 01010100
  • 00001111 << 2 => 001111 => 00111100



Jika kalian menggunakan operator bitwise bersama dengan cout, kalian perlu menggunakan tanda kurung sebagai pembeda dengan "<<" yang digunakan cout. Sebaiknya, pisahkan penggunaan operator bitwise dengan cout jika kalian masih bisa menyimpannya dalam variabel.

Operator And (&)

Operator bitwise and (&) kegunaannya punya kesamaan dengan operator logika and (&&). Bedanya, true diganti dengan angka 1, dan false diganti dengan angka 0. 

Operator bitwise and digunakan untuk menghasilkan nilai baru berdasarkan perbandingan bit dari dua angka. Operator ini membandingkan dua bit yang posisinya sama dari dua bilangan atau variabel yang dijadikan operand. Aturan dari perbandingan bit dari operator and bisa kalian lihat di bawah ini.

Bit operand 1 Bit operand 2 Hasil
0 (false) 0 (false) 0 (false)
1 (true) 0 (false) 0 (false)
0 (false) 1 (true) 0 (false)
1 (true) 1 (true) 1 (true)

Sama seperti "&& (operator logika and)", hasil "operator bitwise and (&)" akan bernilai true (1) jika kedua bit bernilai true (1). Jika salah satu bit bernilai false (0), maka hasilnya adalah false (0). Contoh penggunaan operator and dan hasilnya bisa kalian lihat di bawah ini.

  • 11111111 & 00000000 => 00000000
  • 11111111 & 11111111 => 11111111
  • 10101010 & 11111111 => 10101010
  • 11110000 & 11000000 => 11000000

Operator Or (|)

Operator bitwise or kegunaannya hampir sama dengan operator bitwise and. Operator bitwise or menggunakan aturan yang hampir sama dengan operator logika or untuk membandingkan bit dari dua bilangan. Seperti operator bitwise lainnya, perbandingan dilakukan terhadap setiap bit dari operand yang digunakan.

Bit operand 1 Bit operand 2 Hasil
0 (false) 0 (false) 0 (false)
1 (true) 0 (false) 1 (true)
0 (false) 1 (true) 1 (true)
1 (true) 1 (true) 1 (true)

Dari tabel di atas, kalian seharusnya bisa melihat pola dari aturan yang digunakan. Salah satu bit yang dibandingkan harus bernilai true (1) agar hasilnya true (1). Jika kedua bit bernilai false (0), maka hasilnya adalah 0. Contoh penggunaan operator and dan hasilnya bisa kalian lihat di bawah ini.

  • 11111111 | 00000000 => 11111111
  • 11111111 | 11111111 => 11111111
  • 10101010 | 11111111 => 11111111
  • 11110000 | 11000000 => 11110000


Operator Xor (^)

Operator Xor cara penggunaannya sama dengan operator and dan or. Bedanya ada pada aturan perbandingan bitnya.

Bit operand 1 Bit operand 2 Hasil
0 (false) 0 (false) 0 (false)
1 (true) 0 (false) 1 (true)
0 (false) 1 (true) 1 (true)
1 (true) 1 (true) 0 (true)
Operator XOR mengharuskan bit yang dibandingkan dari dua operand berbeda nilainya agar hasilnya true (1). Jika bit yang dibandingkan bernilai sama, maka hasilnya adalah false (0). Contoh penggunaan operator and dan hasilnya bisa kalian lihat di bawah ini.

  • 11111111 ^ 00000000 => 11111111
  • 11111111 ^ 11111111 => 00000000
  • 10101010  ^ 11111111 => 01010101
  • 11110000 ^ 11000000 => 00110000