Tutorial Belajar PHP Part 26: Pengertian dan Jenis-jenis Operator Bitwise dalam PHP

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.

Dalam tutorial ini saya berasumsi anda telah mengetahui cara penulisan, dan perhitungan bilangan biner, jika belum silahkan mempelajarinya terlebih dahulu.

Jenis-Jenis Operator Bitwise PHP

PHP mendukung 6 jenis operator bitwise. Daftar lengkapnya dapat dilihat pada tabel dibawah ini:

Tabel Jenis Operator Bitwise PHP


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 />";
?>

Contoh Operator Bitwise dalam PHPDalam 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.

8 Comments

  1. rickyhitman10
    19 Apr 15
  2. nevki
    20 Jan 17
  3. hidzak
    09 Mar 18
    • Andre
      10 Mar 18
  4. Hisnan
    12 Oct 18
    • Andre
      14 Oct 18
  5. diam diam meroket
    26 Sep 22
    • Andre
      26 Sep 22

Add Comment