Operator Bitwise pada Bahasa C
Bahasa C merupakan bahasa pemrograman tingkat menengah yang kaya akan operator. Operator-operator pada bahasa C memiliki kedekatan dengan operasi-operasi pada bahasa rakitan (assembly language). Salah satu dari operator-operator tersebut adalah operator bitwise atau operator yang digunakan untuk memanipulasi bit-bit suatu variabel. Operator bitwise terdiri dari operator shift left, shift right, AND, OR, X-OR, dan NOT.
1. Shift Left (Geser Kiri)
Operator shift left pada bahasa C adalah "
Operator shift left pada bahasa C adalah "
<<
". Operator shift left digunakan untuk menggeser bit-bit suatu variabel sebanyak n kali ke kiri, dengan n adalah banyaknya pergeseran. Berikut ini merupakan contoh penggunaannya dalam bahasa C.
int a, b, c;
a = 10;
b = 2;
c = a << 2;
Pada contoh diatas, variabel c menyimpan nilai pergeseran dari nilai 10
(nilai a) sebanyak 2 kali (nilai b) ke kiri. Karena variabel a, b dan c
bertipe integer, maka proses pergeserannya dilakukan pada representasi
16 bit (2 byte) karena ukuran variabel bertipe integer adalah 2 byte.
Proses pergeseran nilai a sebanyak 2 kali adalah sebagai berikut:
Nilai a : 0000 0000 0000 1010 = 10
Pergeseran ke-1 : 0000 0000 0001 0100 = 20
Pergeseran ke-2 : 0000 0000 0010 1000 = 40
Nilai variabel c adalah nilai variabel a yang sudah bergeser ke kiri
sebanyak 2 kali, yaitu 0000 0000 0010 1000 dalam binari atau 40 desimal.
Sebagai ringkasan, jika susunan bit suatu variabel digeser ke kiri sebanyak n kali maka nilainya akan sesuai dengan aturan:
X * 2n
. Pada contoh diatas, nilai 10 digeser 2 kali maka akan bernilai: 10 * 22 = 10 * 4 = 40
.
2. Shift Right (Geser Kanan)
Operator shift right pada bahasa C adalah "
Operator shift right pada bahasa C adalah "
>>
". Operator shift right digunakan untuk menggeser bit-bit suatu variabel sebanyak n kali ke kanan, dengan n adalah banyaknya pergeseran. Berikut ini merupakan contoh penggunaannya dalam bahasa C.
int x, y, z;
x = 31;
y = 3;
z = x << y;
Pada contoh diatas, variabel z menyimpan nilai pergeseran dari nilai 31
(nilai x) sebanyak 3 kali (nilai y) ke kanan. Karena variabel x, y dan z
bertipe integer, maka proses pergeserannya dilakukan pada representasi
16 bit (2 byte) karena ukuran variabel bertipe integer adalah 2 byte.
Proses pergeseran nilai x sebanyak 3 kali adalah sebagai berikut:
Nilai x : 0000 0000 0001 1111 = 31
Pergeseran ke-1 : 0000 0000 0000 1111 = 15
Pergeseran ke-2 : 0000 0000 0000 0111 = 7
Pergeseran ke-3 : 0000 0000 0000 0011 = 3
Nilai variabel z adalah nilai variabel x yang sudah bergeser ke kanan
sebanyak 3 kali, yaitu 0000 0000 0000 0011 dalam binari atau 3 desimal.
Sebagai ringkasan, jika susunan bit suatu variabel digeser ke kanan sebanyak n kali maka nilainya akan sesuai dengan aturan:
X / 2n
,
dengan nilai pecahannya atau nilai dibelakang komanya dihilangkan. Pada
contoh diatas, nilai 31 digeser 3 kali maka akan bernilai: 31 / 23 = 31 / 8 = 3
.
Hasil bagi dari 31 dibagi dengan 8 seharusnya adalah 3.875, nilai
pecahannya dihilangkan sehingga menjadi 3. Mengapa dihilangkan? Karena
operasi pergeseran bitnya dilakukan pada tipe integer (bilangan bulat).
3. Bitwise AND
Operator bitwise AND pada bahasa C adalah "
Operator bitwise AND pada bahasa C adalah "
&
". Operator
bitwise AND akan meng-AND-kan setiap bit dari nilai variabel yang
dioperasikannya. Berikut ini adalah tabel kebenaran operator AND.
Tabel Kebenaran Operator AND
+-----------+-----------+--------+
| Operand 1 | Operand 2 | Output |
+-----------+-----------+--------+
| FALSE | FALSE | FALSE |
| TRUE | FALSE | FALSE |
| TRUE | TRUE | TRUE |
| FALSE | TRUE | FALSE |
+-----------+-----------+--------+
Setelah mempelajari tabel diatas, maka dapat disimpulkan bahwa operator
AND hanya akan menghasilkan nilai TRUE jika kedua operand bernilai TRUE.
Jika salah satu atau kedua operand bernilai FALSE maka operator AND
akan menghasilkan nilai FALSE. Pada bahasa C, nilai TRUE dilambangkan
dengan nilai 1, sedangkan nilai FALSE dilambangkan dengan nilai 0.
Berikut ini adalah contoh operasi bitwise AND.
Pada contoh diatas, variabel output menyimpan hasil bitwise AND dari variabel op1 dengan op2. Proses operasi bitwise AND yang terjadi pada komputer adalah sebagai berikut:
int op1, op2, output;
op1 = 31;
op2 = 40;
output = op1 & op2;
Pada contoh diatas, variabel output menyimpan hasil bitwise AND dari variabel op1 dengan op2. Proses operasi bitwise AND yang terjadi pada komputer adalah sebagai berikut:
Nilai op1 : 0000 0000 0001 1111 = 31
Nilai op2 : 0000 0000 0010 1000 = 40 &
--------------------------------------------------
Nilai output : 0000 0000 0000 1000 = 8
Pada penjelasan diatas, nilai variabel output adalah 8, yang diperoleh
dari operasi bitwise AND setiap susunan bit variabel op1 dengan op2.
Berikut ini adalah perinciannya.
+-----+-----+-----+--------+
| Bit | op1 | op2 | output | Susunan bit dari bit ke-6 hingga ke-1
+-----+-----+-----+--------+ -------------------------------------
| 6 | 0 | 1 | 0 | |
| 5 | 1 | 0 | 0 | |
| 4 | 1 | 1 | 1 | |
| 3 | 1 | 0 | 0 | |
| 2 | 1 | 0 | 0 | |
| 1 | 1 | 0 | 0 | |
+-----+-----+-----+--------+ +------> 001000 = 8 desimal
4. Bitwise OR
Operator bitwise OR pada bahasa C adalah "
Operator bitwise OR pada bahasa C adalah "
|
". Operator
bitwise OR akan meng-OR-kan setiap bit dari nilai variabel yang
dioperasikannya. Berikut ini adalah tabel kebenaran operator OR.
Tabel Kebenaran Operator OR
+-----------+-----------+--------+
| Operand 1 | Operand 2 | Output |
+-----------+-----------+--------+
| FALSE | FALSE | FALSE |
| TRUE | FALSE | TRUE |
| TRUE | TRUE | TRUE |
| FALSE | TRUE | TRUE |
+-----------+-----------+--------+
Setelah mempelajari tabel diatas, maka dapat disimpulkan bahwa operator
OR akan menghasilkan nilai TRUE jika salah satu atau kedua operand
bernilai TRUE. Jika kedua operand bernilai FALSE maka operator AND akan
menghasilkan nilai FALSE. Berikut ini adalah contoh operasi bitwise OR.
Pada contoh diatas, variabel output menyimpan hasil bitwise OR dari variabel op1 dengan op2. Proses operasi bitwise OR yang terjadi pada komputer adalah sebagai berikut:
int op1, op2, output;
op1 = 27;
op2 = 31;
output = op1 | op2;
Pada contoh diatas, variabel output menyimpan hasil bitwise OR dari variabel op1 dengan op2. Proses operasi bitwise OR yang terjadi pada komputer adalah sebagai berikut:
Nilai op1 : 0000 0000 0001 1011 = 27
Nilai op2 : 0000 0000 0001 1111 = 31 |
--------------------------------------------------
Nilai output : 0000 0000 0001 1111 = 31
Pada penjelasan diatas, nilai variabel output adalah 31, yang diperoleh
dari operasi bitwise OR setiap susunan bit variabel op1 dengan op2.
Berikut ini adalah perinciannya.
+-----+-----+-----+--------+
| Bit | op1 | op2 | output | Susunan bit dari bit ke-5 hingga ke-1
+-----+-----+-----+--------+ -------------------------------------
| 5 | 1 | 1 | 1 | |
| 4 | 1 | 1 | 1 | |
| 3 | 0 | 1 | 1 | |
| 2 | 1 | 1 | 1 | |
| 1 | 1 | 1 | 1 | |
+-----+-----+-----+--------+ +------> 11111 = 31 desimal
5. Bitwise X-OR
Selain operator OR, bahasa C juga memiliki operator X-OR (dibaca eks-OR) atau exclusive OR. Operator bitwise X-OR pada bahasa C adalah "
Selain operator OR, bahasa C juga memiliki operator X-OR (dibaca eks-OR) atau exclusive OR. Operator bitwise X-OR pada bahasa C adalah "
^
".
Operator bitwise X-OR akan meng-X-OR-kan setiap bit dari nilai variabel
yang dioperasikannya. Berikut ini adalah tabel kebenaran operator X-OR.
Tabel Kebenaran Operator X-OR
+-----------+-----------+--------+
| Operand 1 | Operand 2 | Output |
+-----------+-----------+--------+
| FALSE | FALSE | FALSE |
| TRUE | FALSE | TRUE |
| TRUE | TRUE | FALSE |
| FALSE | TRUE | TRUE |
+-----------+-----------+--------+
Setelah mempelajari tabel diatas, maka dapat disimpulkan bahwa operator
X-OR akan menghasilkan nilai TRUE jika kedua operand bernilai berbeda.
Operand pertama bernilai TRUE dan operand kedua bernilai FALSE, atau
sebaliknya. Jika kedua operand bernilai sama, keduanya FALSE atau
keduanya TRUE, maka operator X-OR akan menghasilkan nilai FALSE. Berikut
ini adalah contoh operasi bitwise X-OR.
Pada contoh diatas, variabel output menyimpan hasil bitwise X-OR dari variabel op1 dengan op2. Proses operasi bitwise X-OR yang terjadi pada komputer adalah sebagai berikut:
int op1, op2, output;
op1 = 31;
op2 = 40;
output = op1 ^ op2;
Pada contoh diatas, variabel output menyimpan hasil bitwise X-OR dari variabel op1 dengan op2. Proses operasi bitwise X-OR yang terjadi pada komputer adalah sebagai berikut:
Nilai op1 : 0000 0000 0001 1111 = 31
Nilai op2 : 0000 0000 0010 1000 = 40 ^
--------------------------------------------------
Nilai output : 0000 0000 0011 0111 = 55
Pada penjelasan diatas, nilai variabel output adalah 55, yang diperoleh
dari operasi bitwise X-OR setiap susunan bit variabel op1 dengan op2.
Berikut ini adalah perinciannya.
+-----+-----+-----+--------+
| Bit | op1 | op2 | output | Susunan bit dari bit ke-6 hingga ke-1
+-----+-----+-----+--------+ -------------------------------------
| 6 | 0 | 1 | 1 | |
| 5 | 1 | 0 | 1 | |
| 4 | 1 | 1 | 0 | |
| 3 | 1 | 0 | 1 | |
| 2 | 1 | 0 | 1 | |
| 1 | 1 | 0 | 1 | |
+-----+-----+-----+--------+ +------> 110111 = 55 desimal
Sebagai catatan, jika suatu nilai di-X-OR-kan dengan nilai yang sama
maka akan menghasilkan nilai 0. Berikut ini adalah contohnya.
Nilai 1 : 0000 0000 0001 1011 = 27
Nilai 2 : 0000 0000 0001 1011 = 27 ^
--------------------------------------------------
Hasil : 0000 0000 0000 0000 = 0
6. Bitwise NOT (Komplemen 2)
Operator bitwise NOT komplemen 2 pada bahasa C dilambangkan dengan "
Operator bitwise NOT komplemen 2 pada bahasa C dilambangkan dengan "
~
". Operator bitwise NOT tidak seperti operator logika NOT (!
) karena pada operator bitwise NOT proses inversi dilakukan dua kali. Berikut ini adalah contoh operasi bitwise NOT.
int a, b;
a = 1;
b = ~a;
Pada contoh diatas, nilai variabel b adalah nilai variabel a setelah
dilakukan operasi bitwise NOT. Proses operasi bitwise NOT pada operator a
adalah sebagai berikut:
Nilai a : 0000 0000 0000 0001 NOT
--------------------------------------------
Inversi ke-1: 1111 1111 1111 1110
-
Hasil inversi ke-1 akan menentukan proses berikutnya. Jika pada hasil
proses inversi ke-1 bit paling kiri (pada contoh adalah bit ke-16,
dihitung dari kanan) bernilai 1, maka harus dilakukan proses inversi
ke-2 dan hasil proses inversi ke-2 akan bernilai negatif. Sebelum
dilakukan proses inversi ke-2, hasil inversi ke-1 harus dikurangi dengan
1. Berikut ini adalah prosesnya.
Inversi ke-1: 1111 1111 1111 1110
Dikurangi 1 : 0000 0000 0000 0001 -
--------------------------------------------
Hasil : 1111 1111 1111 1101
Setelah dilakukan pengurangan dengan 1, maka dilakukan inversi ke-2
Hasil : 1111 1111 1111 1101 NOT
--------------------------------------------
Inversi ke-2: 0000 0000 0000 0010 = 2
Hasil inversi ke-2 adalah 2, tetapi karena pada proses inversi ke-1
nilai bit paling kiri adalah 1, maka hasil akhirnya adalah -2 (negatif
2).
Demikianlah pembahasan tentang operator bitwise pada bahasa C. Semoga bermanfaat.
sumber: berbagai referensi...
0 comments:
Post a Comment