Ini
adalah operator yang sering dilupakan dan sering tidak digunakan pada saat kita
melakukan pemrograman, apalagi kita hanya membuat pemrograman desktop yang
lebih menuntut kita untuk bermain di seputar modifikasi swing. Padahal
sebenarnya untuk membuat aplikasi yang lebih mengutamakan keamanan, penggunaan
operator ini adalah sangat penting, lebih-lebih pada saat kita menerapkan teknik
enkripsi pada data yang dimasukkan maupun dikeluarkan. Mengapa? Untuk lebih
jelasnya, saya akan terlebih dahulu menjelaskan, apa itu operator bitwise
shift (geser).
Operator
Bitwise Shift (Geser) adalah operator penggeseran bit ke arah yang ditentukan
sebanyak nilai yang telah didefinisikan
Disini
saya akan membeberkan 3 operator bitwise shift yang saya ketahui (mungkin jika
ada yang tau lebih dari 3, bisa di-share di sini), yaitu :
- Operator Bitwise Shift Right (Geser Kanan) ">>"
- Operator Bitwise Shift Kiri (Geser Kiri) "<<"
- Operator Bitwise Shift Zero Fill ">>>"
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 :
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 :
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 :D
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 "<<" :
nilai
'<<' banyaknya_penggeseran_bit_ke_arah_kiri
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"
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 :
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)
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
Dari
penjelasan di atas, jadi salah satu fungsi operator bitwise shift zero fill
ini, lebih digunakan untuk menggeser bilangan yang bernilai negatif :D
|
&
|
Operasi AND untuk bit
|
|
I
|
Operasi OR untuk bit
|
|
^
|
Operasi Ex Or untuk bit
|
|
˜
|
Operasi NOT untuk bit
|
|
<<
|
Geser kiri (geser 1 bit = *2)
|
|
>>
|
Geser kanan (geser 1 bit =/2)
|
|
>>>
|
Geser kanan tak bertanda
|
Tidak ada komentar:
Posting Komentar