Melanjutkan pembahasan tentang operator bahasa pemrograman Python, dalam tutorial ini kita akan mempelajari Jenis-jenis Operator Bitwise.
Pengertian Operator Bitwise dalam Python
Bitwise adalah operator khusus untuk menangani operasi logika bilangan biner dalam bentuk bit.
Bilangan biner sendiri merupakan jenis bilangan yang hanya terdiri dari 2 jenis angka, yakni 0 dan 1. Jika nilai asal yang dipakai bukan bilangan biner, akan dikonversi secara otomatis menjadi bilangan biner. Misalnya 7 desimal = 0111 dalam bilangan biner.
Pada penerapannya, operator bitwise tidak terlalu sering dipakai, kecuali anda sedang membuat program yang harus memproses bit-bit komputer. Selain itu operator ini cukup rumit dan harus memiliki pemahaman tentang sistem bilangan biner. Dalam bahasan kali ini saya menganggap anda sudah paham beda antara bilangan biner (basis 2) dan bilangan desimal (basis 10).
Bahasa Python mendukung 6 jenis operator bitwise:
Operator | Nama | Contoh | Biner | Hasil (biner) | Hasil (decimal) |
---|---|---|---|---|---|
& | And | 10 & 12 | 1010 & 1100 | 1000 | 8 |
| | Or | 10 | 12 | 1010 | 1100 | 1110 | 14 |
^ | Xor | 10 ^ 12 | 1010 ^ 1100 | 0110 | 6 |
~ | Not | ~ 10 | ~1010 | 0101 | -11 (two complement) |
<< | Left shift | 10 << 1 | 1010 << 1 | 10100 | 20 |
>> | Right shift | 10 >> 1 | 1010 >> 1 | 101 | 5 |
Contoh Kode Program Operator Bitwise Python
Berikut contoh kode program dari penggunaan operator bitwise dalam bahasa pemrograman Python:
x = 10 y = 12 print('x berisi angka',x ,'desimal atau',bin(x),'biner') print('y berisi angka',y ,'desimal atau',bin(y),'biner') print('\n') print('x & y :',x & y) print('x | y :',x | y) print('x ^ y :',x ^ y) print('~x :',~x) print('x << 1 :',x << 1) print('x >> 1 :',x >> 1)
Hasil kode program:
x berisi angka 10 desimal atau 0b1010 biner y berisi angka 12 desimal atau 0b1100 biner x & y : 8 x | y : 14 x ^ y : 6 ~x : -11 x << 1 : 20 x >> 1 : 5
Dalam contoh di atas, saya mendefinisikan 2 variabel: x dan y. Kemudian memberikan nilai awal 10 dan 12. Jika di konversi ke dalam bentuk biner, keduanya berisi angka berikut:
x = 10 (desimal) = 1010 (biner) y = 12 (desimal) = 1100 (biner)
Di baris 4 dan 5 saya menggunakan function bawaan python, yakni bin(), ini bisa dipakai untuk menampilkan versi biner dari sebuah angka desimal. Awalan 0b merupakan penanda bahwa ini adalah angka biner. Artinya, angka 0b1010 adalah 1010 dalam bilangan biner.
Operator bitwise pertama adalah operasi & (And) terhadap kedua variabel. Operasi bitwise "and" ini akan memproses bit per bit dari kedua variabel, jika kedua bit sama-sama 1, maka hasilnya juga 1, selain kondisi tersebut, nilai akhirnya adalah 0. Berikut perhitungan bitwise "and":
x = 1010 y = 1100 ---- x & y = 1000 = 8 (desimal)
Dan dari hasil print, terlihat bahwa hasilnya adalah 10 (dalam bentuk desimal).
Operator bitwise kedua adalah operasi | (Or), hasilnya akan bernilai 0 jika kedua bit bernilai 0, selain itu nilai bit akan di set menjadi 1. Berikut cara perhitungan bitwise "or":
x = 1010 y = 1100 ----- x | y = 1110 = 14 (desimal)
Operator bitwise ketiga adalah operasi ^ (Xor), hasilnya akan bernilai 1 jika salah satu dari kedua variabel bernilai 1 (namun tidak keduanya). Atau dengan kata lain jika kedua bit berlainan, hasilnya 1 tapi kalau sama-sama 0 atau sama-sama 1, hasilnya 0.
Berikut cara perhitungan bitwise "xor":
x = 1010 y = 1100 ----- x ^ y = 0110 = 6 (desimal)
Selanjutnya adalah operasi ~ atau not, yang akan membalikkan nilai bit sebuah variabel dari 0 menjadi 1, dan 1 menjadi nol. Namun perhitungan bit not ini sedikit membingungkan karena jika kita hanya membalikkan seluruh bit saja, hasilnya tidak sesuai dengan apa yang dihitung Python:
x = 1010 -------- ~x = 0101 = 5 (desimal) ==> salah ???
Dari hasil menjalankan program, dapat dilihat bahwa ~a = -11, dari manakah datangnya angka -11?
Ini berkaitan dengan cara bahasa python menyimpan angka biner (dan juga hampir semua bahasa pemrograman komputer modern). Angka biner di dalam bahasa python disimpan dalam format "Two's complement". Penjelasan tentang "Two's complement" ini cukup panjang, jika tertarik saya sudah membahasnya lengkap di buku Pascal Uncover, atau bisa ke Two's complement Wikipedia.
Secara singkat, rumusnya adalah -x - 1
, sehingga ~x = -10 - 1 = -11
(desimal)
Di baris 13 adalah operator shift left "<<" dimana nilai variabel x akan digeser sebanyak 1 digit ke kiri. Berikut proses yang terjadi:
x = 1010 = 10 x << 1 = 10100 = 20 (desimal)
Ketika hasil pergeseran ke kiri, digit paling kanan akan diisi angka 0. Setiap penggeseran 1 tempat ke kiri akan mengkali 2 nilai asal. Karena variabel x berisi desimal 10, maka hasil dari << 1 sama dengan 10 * 2 = 20
Di baris 14, terdapat operator shift right ">>" dimana bahasa python akan menggeser posisi bit dalam variabel x ke kanan sebanyak 1 tempat. Berikut proses yang terjadi:
x = 1010 = 10 x >> 1 = 101 = 5 (desimal)
Operator shift right menggeser nilai biner variabel x ke arah kanan, sehingga digit paling kanan akan dihapus. Operator shift right ini akan menghasilkan nilai asal / 2. Dalam contoh kita, hasilnya adalah 10/2 = 5 (dibulatkan).
Dalam tutorial kali ini kita telah mempelajari operator bitwise dalam bahasa python. Pada prakteknya, operator bitwise ini tidak terlalu sering dipakai. Selanjutnya akan dibahas tentang Operator Assignment atau Operator Penugasan Python.