Saturday, April 27, 2013

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 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 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 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.

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 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.

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 "^". 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.

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 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

Followers

  © Blogger template 'A Click Apart' by Ourblogtemplates.com 2008

Back to TOP