Melanjutkan pembahasan tentang operator, dalam tutorial ini kita saya akan membahas Pengertian dan Jenis-jenis Operator Bitwise (Bitwise Operator) dalam PHP.
Pengertian Operator Bitwise dalam PHP
Operator bitwise (Bitwise Operators) adalah operator khusus yang disediakan PHP untuk menangani proses logika untuk bilangan biner. Bilangan biner atau binary adalah jenis bilangan yang hanya terdiri dari 2 jenis angka, yakni 0 dan 1. Jika operand yang digunakan untuk operator ini bukan bilangan biner, maka akan dikonversi secara otomatis oleh PHP menjadi bilangan biner.
Dalam penerapannya, operator bitwise tidak terlalu sering digunakan, kecuali anda membuah program yang langsung berkaitan dengan pemrosesan bilangan biner.
Jenis-Jenis Operator Bitwise PHP
PHP mendukung 6 jenis operator bitwise. Daftar lengkapnya dapat dilihat pada tabel dibawah ini:
Cara Penggunaan Operator Bitwise dalam PHP
Seluruh operator bitwise tersebut diproses dalam bentuk biner. Berikut contoh cara penggunaan operator bitwise dalam PHP:
<?php $a=0b10110101; $b=0b01101100; echo "\$a = 10110101 = $a"; echo "<br />"; echo "\$b = 01101100 = $b"; echo "<br />"; echo "<br />"; echo "==Hasil Bitwise=="; echo "<br />"; $hasil = $a & $b; echo "1. \$a & \$b = $hasil"; echo "<br />"; $hasil = $a | $b; echo "2. \$a | \$b = $hasil"; echo "<br />"; $hasil = $a ^ $b; echo "3. \$a ^ \$b = $hasil"; echo "<br />"; echo "4. ~\$a = ".~$a; echo "<br />"; $hasil = $a >> 1; echo "5. \$a >> 1 = $hasil"; echo "<br />"; $hasil = $b << 2; echo "6. \$b << 2 = $hasil"; echo "<br />"; ?>
Dalam contoh kode PHP diatas, saya mendefenisikan 2 variabel yakni $a dan $b, dan memberikan nilai awal berupa angka biner ke dalam kedua variabel tersebut (cara penulisan angka biner telah kita bahas pada tutorial Tutorial PHP: Mengenal Tipe Data Integer dan Cara Penulisan Integer dalam PHP)
Variabel $a berisi angka biner: 10110101, yang nilai desimalnya adalah 181, dan variabel $b berisi angka biner: 01101100, yang nilai desimalnya adalah 108.
Pada contoh 1, saya melakukan operasi & 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":
$a =Â Â Â Â Â 10110101 $b =Â Â Â Â Â 01101100 -------- $a & $b = 00100100 = 36 (desimal)
Dan dari hasil echo, terlihat bahwa hasilnya adalah 36 (dalam bentuk desimal).
Contoh kedua, untuk operasi I atau or, akan bernilai 0 jika kedua bit variabel bernilai 0, selebihnya nilai bit hasil akan diset menjadi 1. Berikut perhitungan bitwise "or":
$a =Â Â Â Â Â 10110101 $b =Â Â Â Â Â 01101100 -------- $a | $b = 11111101 = 253 (desimal)
Contoh ketiga, menggunakan operasi ^ atau xor, dan bit hasil akan bernilai 1 jika salah satu dari kedua variabel bernilai 1, namun tidak keduanya. Berikut perhitungan bitwise "xor":
$a =Â Â Â Â Â 10110101 $b =Â Â Â Â Â 01101100 -------- $a ^ $b = 11011001 = 217 (desimal)
Contoh keempat, menggunakan 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 bitnya saja, hasilnya tidak sesuai dengan apa yang dihitung oleh PHP, seperti contoh perhitungan berikut:
$a = 10110101 -------- ~$a = 01001010 = 74 (desimal) ==> salah ???
Dari hasil menjalankan program, dapat dilihat bahwa ~$a = -182, darimanakah angka ini? Hal ini terkait dengan cara PHP menyimpan angka biner dengan 32 bit. PHP menyimpan bit dalam perhitungan matematis komputer yang di sebut dengan "Two's complement" Penjelasan tentang ini dapat anda baca lebih lanjut pada http://en.wikipedia.org/wiki/Two%27s_complement dan http://stackoverflow.com/questions/18754198/confusing-php-bitwise-not-behavior
Namun cara perhitungan singkatnya adalah sebagai berikut:
$a  = 00000000000000000000000010110101 (32 bit) -------- ~$a = 11111111111111111111111110110101 (32 bit negative) Flip & -1 = 00000000000000000000000010110101 - 1 ~$a = -182 (desimal) ==> benar
Karena PHP memproses menggunakan 32 bit, maka kita harus mengikutkan seluruh bit 0 yang berada di depan angka biner dengan total 32 digit, lalu menegatifkannya. Jika angka paling kiri terdapat angka 1, maka ini adalah instruksi kepada PHP bahwa hasilnya akan negatif, dan hasil negatif di flip (dinegatifkan kembali), lalu dikurang 1, sehingga menjadi -182 dalam desimal.
Contoh ke 5, adalah operator Shift right dimana PHP akan menggeser variabel $a ke kanan sebanyak 1 tempat. Berikut proses yang terjadi:
$a     = 10110101 = 181 $a >> 1 = 1011010 = 90 (desimal)
Operator shift right menggeser nilai biner variabel $a ke arah kanan, dan digit paling kanan akan dihapus. Operator shift right ini akan menghasilkan nilai asal / 2. Dalam contoh, hasilnya adalah 180/2 = 90 (dibulatkan). Setiap penggeseran 1 tempat ke kanan akan membagi 2 nilai asal.
Contoh ke 6 adalah operator Shift Left, dimana PHP menggeser nilai variabel $b sebanyak 2 digit ke kiri. Berikut proses yang terjadi:
$b     =  01101100 = 108 $b << 2 = 0110110000 = 432 (desimal)
Ketika hasil pergeseran ke kanan, digit paling kiri akan diisi dengan nilai 0. Setiap penggeseran 1 tempat ke kiri akan mengkali 2 nilai asal.
Dalam tutorial kali ini kita telah mempelajari operator bitwise dalam PHP. Anda tidak akan sering menggunakan operator ini. PHP menyediakan operator bitwise untuk keperluan khusus.
thankgiving your explain… i understand right now of operator bitwise… :D
happy coding learn python, c/c++
Thank you (y)
Penjelasannya sungguh jelas :D
Apakah ada untuk materi operasi bitwise dalam bahasa c?
Untuk saat ini tutorial bahasa C di duniailkom belum sampai ke operator bitwise, semoga berkenan menunggu…
Gan, Masih Binggung Kenapa Variabel $a & $b bisa hasilnya 36?
Untuk bisa memahaminya memang harus paham dulu prinsip dasar sistem bilangan biner dan gerbang logika. Menurut saya sih boleh abaikan saja tentang operator bitwise ini karena penggunannya termasuk sangat jarang.
Tapi kalau memang pengen memahami, bisa coba googling tentang "teori bilangan biner" dan "gerbang logika", nanti akan belajar seperti 1 AND 1 hasilnya 1, 1 AND 0 hasilnya 0, dst.
kak mau nanya bagaimana cara untuk mengetahui binary angka atau huruf? pake table apa ya ?
Maksudnya ingin mengkonversi angka atau huruf menjadi binary ya?
Bisa seperti ini: