3 operator bitwise shift yaitu :
- Operator Bitwise Shift Right (Geser Kanan) ">>"
- Operator Bitwise Shift Kiri (Geser Kiri) "<<"
- Operator Bitwise Shift Zero Fill ">>>"
Pendahuluan
Operator shift kanan ( >> ) dan shift kiri ( << ) pada Java digunakan untuk menggeser posisi bit per bit dari variable data kita.
Sebagai contoh misalkan kita memiliki data dengan susunan data bit berikut ini :
Sebagai contoh misalkan kita memiliki data dengan susunan data bit berikut ini :
00000101
maka jika dilakukan shift / pergeseran 2 bit ke kiri maka posisi setelah pergeseran adalah sebagai berikut :
00010100
Operator ini berguna dalam penanganan berbagai perhitungan yang terkait dengan manipulasi bit.
Gambar berikut menunjukkan proses shifting 3 bit ke kiri dengan operator <<<.
Gambar berikut menunjukkan proses shifting 3 bit ke kiri dengan operator <<<.
Berikut adalah contoh program Java menggunakan operator shift ini dan hasil outputnya.
Contoh Penggunaan Shift
package com.kursusinternet.math;
public class ContohOperatorShift {
public static void main(String[] args) {
int angka_satu = 1;
System.out.println("Output Dalam Desimal");
System.out.println("====================");
System.out.println(angka_satu);
System.out.println(angka_satu << 1);
System.out.println(angka_satu << 3);
System.out.println(angka_satu << 3 >> 2);
System.out.println("Output Dalam Biner");
System.out.println("==================");
System.out.println(Integer.toBinaryString(angka_satu));
System.out.println(Integer.toBinaryString(angka_satu << 1));
System.out.println(Integer.toBinaryString(angka_satu << 3));
System.out.println(Integer.toBinaryString(angka_satu << 3 >> 2));
}
}
public class ContohOperatorShift {
public static void main(String[] args) {
int angka_satu = 1;
System.out.println("Output Dalam Desimal");
System.out.println("====================");
System.out.println(angka_satu);
System.out.println(angka_satu << 1);
System.out.println(angka_satu << 3);
System.out.println(angka_satu << 3 >> 2);
System.out.println("Output Dalam Biner");
System.out.println("==================");
System.out.println(Integer.toBinaryString(angka_satu));
System.out.println(Integer.toBinaryString(angka_satu << 1));
System.out.println(Integer.toBinaryString(angka_satu << 3));
System.out.println(Integer.toBinaryString(angka_satu << 3 >> 2));
}
}
Hasil Output
Output Dalam Desimal
====================
1
2
8
2
Output Dalam Biner
==================
1
10
1000
10
Pada saat menggunakan operator >> (shift right), setiap penggeseran yang terjadi akan melakukan penyalinan nilai bit paling kiri ke nilai yang dihasilkan.
Namun, apabila kita menggunakan operator >>> (shift right zero fill), maka bit paling kiri akan selalu diisi dengan nilai 0.
sebagai contoh :
1. Operator Bitwise Shift Right (Geser Kanan) ">>"
Ini digunakan untuk melakukan penggeseran bit ke arah kanan sebanyak nilai yang didefinisikan.
Apabila terdapat operasi "x >> 3" berarti melakukan penggeseran 3 bit ke kanan dari nilai x yang telah dikonversikan ke dalam bilangan biner.
Adapun bentuk umum dari operator ">>" sebagai berikut :
Apabila terdapat operasi "x >> 3" berarti melakukan penggeseran 3 bit ke kanan dari nilai x yang telah dikonversikan ke dalam bilangan biner.
Adapun bentuk umum dari operator ">>" sebagai berikut :
nilai >> banyaknya_penggeseran_bit_ke_arah_kanan
Secara teknis nya, misal :
64 >> 1, maka 64 diubah ke dalam bilangan biner menjadi 1000000. Kemudian dilakukan penggeseran sebanyak 1 bit ke arah kanan.
Sehingga yang semula 1000000 akan menjadi100000 yaitu bernilai 32 pada desimal. Jadi, 64 >> 1 = 32.
Untuk memudahkan dalam menentukan nilai yang diberikan dari operasi ini, yang perlu diingat : "setiap proses penggeseran bit yang terjadi sebanyak n, maka operator >> akan membagi suatu nilai dengan 2 sebanyak n juga" Dari kemudahan diatas, kita bisa menentukan,
misal :
Sehingga yang semula 1000000 akan menjadi100000 yaitu bernilai 32 pada desimal. Jadi, 64 >> 1 = 32.
Untuk memudahkan dalam menentukan nilai yang diberikan dari operasi ini, yang perlu diingat : "setiap proses penggeseran bit yang terjadi sebanyak n, maka operator >> akan membagi suatu nilai dengan 2 sebanyak n juga" Dari kemudahan diatas, kita bisa menentukan,
misal :
64 >> 1 = 32, karena 64 : 2 = 32
64 >> 2 = 16, karena 64 : 2 : 2 = 16
64 >> 3 = 8, karena 64 : 2 : 2 : 2 = 8 (perhatikan jumlah pembagian 2 nya)
Lalu, bagaimana jika ada sisa pembagian ? Misal :
63 >> 1 ini kan berarti 63 : 2 = 31 sisa 1 Sebenarnya, kalau kita tentukan secara teknis, 63 kita ubah ke bilangan biner menjadi 111111.
Lalu kita lakukan penggeseran ke arah kanan sebanyak 1 kali, maka bilangan biner menjadi11111, yaitu 31 pada bilangan desimal. Artinya, untuk sisa pembagian tadi, maka abaikan saja pada hasil sisanya.
Lalu kita lakukan penggeseran ke arah kanan sebanyak 1 kali, maka bilangan biner menjadi11111, yaitu 31 pada bilangan desimal. Artinya, untuk sisa pembagian tadi, maka abaikan saja pada hasil sisanya.
2. Operator Bitwise Shift Left (Geser Kiri) "<<"
Merupakan operator kebalikan dari operator >>, yang berarti kita melakukan penggeseran bit ke arah kiri sebanyak nilai yang didefinisikan.
Apabila terdapat operasi "x '<<' 3" berarti melakukan penggeseran 3 bit ke kiri dari nilai x yang telah dikonversikan ke dalam bilangan biner.
Adapun bentuk umum dari operator "<<" :
Apabila terdapat operasi "x '<<' 3" berarti melakukan penggeseran 3 bit ke kiri dari nilai x yang telah dikonversikan ke dalam bilangan biner.
Adapun bentuk umum dari operator "<<" :
Secara teknis nya, misal :
8 '<<' 1 maka 8 diubah ke dalam bilangan biner menjadi 1000. Kemudian dilakukan penggeseran sebanyak 1 bit ke arah kiri.
Sehingga yang semula 1000 akan menjadi 10000(pada saat penggeseran nilai paling kanan diisi dengan bit 0) yaitu bernilai 16 pada desimal. Jadi,8 << 1 ="">.
Untuk memudahkan dalam menentukan nilai yang diberikan dari operasi ini, yang perlu diingat :"setiap proses penggeseran bit yang terjadi sebanyak n, maka operator '<<' akan mengalikan suatu nilai dengan 2 sebanyak n juga"
Sehingga yang semula 1000 akan menjadi 10000(pada saat penggeseran nilai paling kanan diisi dengan bit 0) yaitu bernilai 16 pada desimal. Jadi,8 << 1 ="">.
Untuk memudahkan dalam menentukan nilai yang diberikan dari operasi ini, yang perlu diingat :"setiap proses penggeseran bit yang terjadi sebanyak n, maka operator '<<' akan mengalikan suatu nilai dengan 2 sebanyak n juga"
Dari kemudahan diatas, kita bisa menentukan, misal :
8 '<<' 1 = 16 karena 8 x 2 = 16
8 '<<' 2 = 32 karena 8 x 2 x 2 = 32
8 '<<' 3 = 64 karena 8 x 2 x 2 x 2 = 64 (perhatikan jumlah perkalian 2 nya)
3. Operator Bitwise Shift Right Zero Fill ">>>"
Bit paling kiri (high-order bit) digunakan untuk menentukan tanda (sign) dari suatu bilangan (apakah positif atau negatif). Nilai bit 0 menandakan nilai positif dan nilai bit 1 menandakan nilai negatif.
Contoh :
Contoh :
Nilai -1 dalam bilangan biner adalah 11111111 11111111 11111111 11111111 (pada bit paling kiri adalah sign dari bilangan yang menunjukkan bahwa bilangan ini negatif)
Nilai 255 dalam bilangan biner adalah 00000000 00000000 00000000 11111111 (pada bit paling kiri adalah sign dari bilangan yang menunjukkan bahwa bilangan ini positif)
Nilai 255 dalam bilangan biner adalah 00000000 00000000 00000000 11111111 (pada bit paling kiri adalah sign dari bilangan yang menunjukkan bahwa bilangan ini positif)
Pada saat menggunakan operator >> (shift right), setiap penggeseran yang terjadi akan melakukan penyalinan nilai bit paling kiri ke nilai yang dihasilkan.
Namun, apabila kita menggunakan operator >>> (shift right zero fill), maka bit paling kiri akan selalu diisi dengan nilai 0.
sebagai contoh :
-1 >>> 24 = 255
11111111 11111111 11111111 11111111 digeser 24 bit ke kanan maka menjadi
00000000 00000000 00000000 11111111 yang bernilai 255 pada bilangan desimal
Referensi
[1] http://www.kursusinternet.com/java-programming/math/penggunaan-operator-shift
[2] http://timordotx.blogspot.com/2010/09/operator-bitwise-shift-geser-pada-java.html
[2] http://timordotx.blogspot.com/2010/09/operator-bitwise-shift-geser-pada-java.html
0 comments :
Post a Comment