Tutorial PHP Dasar
Operator Bitwise
Pada video ini kita akan membahas mengenai Operator Bitwise, yaitu operator yang memproses sebuah angka berdasarkan sistem bilangan biner. Jadi sebelum kita melanjutkan ke operator bitwise, kita mesti mengerti terlebih dahulu apakah itu bilangan biner.
Pertama kita perlu mengenal terlebih dahulu, satuan paling dasar dari komputer yaitu bit. Bit ini adalah satu digit angka biner, yang hanya bisa menyebutkan nilai 0 atau 1. Pada dasarnya komputer hanya bisa mengenal nilai bit, karena komputer terdiri dari banyak transistor. Apabila transistor tidak mengandung listrik, maka komputer mengenalinya sebagai angka 0, sedangkan bila transistor mengandung listrik, maka komputer mengenalinya sebagai angka 1. Beberapa bit yang disusun bisa membentuk bilangan biner, misalkan 0010 0101.
Ini adalah contoh bilangan 8-bit. Artinya ada 8 digit bilangan yang terdiri dari angka 0 atau 1. Kebanyakan komputer yang digunakan pada saat ini menggunakan sistem 64-bit. Artinya untuk membentuk satu buah nilai integer, komputer menggunakan bilangan biner sebanyak 64 digit. Delapan kali lebih banyak dibandingkan contoh yang kita lihat ini. Namun untuk menyederhanakan latihan, untuk sementara kita gunakan 8-bit dahulu ya.
Nah, yang dilihat oleh komputer adalah sistem bilangan biner. Sedangkan yang dimengerti oleh manusia adalah sistem bilangan desimal. Bagaimana cara mengubah bilangan biner menjadi desimal? Pertama, nilai biner harus kita beri index terlebih dahulu. Index di bagian paling kanan adalah 0, dan bertambah 1 setiap kali berpindah ke kiri.
Lalu kita perhatikan semua bit yang mengandung nilai 1. Pada contoh, terdapat tiga buat bit dengan nilai 1 ya. Yaitu bit dengan index 0, 2 dan 5. Kita hitung nilai dari bit ini berdasarkan nomor indexnya.
Yang pertama adalah bit dengan index 0, artinya bernilai sebesar 2 dipangkat 0, atau 1. Yang kedua adalah bit dengan index 2, bernilai 2 dipangkat 2 yaitu 4. Sedangkan yang ketiga adalah bit dengan index 5, bernilai 2 dipangkat 5, yaitu 32. Kalau kita jumlahkan 1 + 4 + 32, maka kita mendapatkan nilai desimalnya adalah 37.
Untuk memeriksanya kita bisa menggunakan program kalkulator ya. Kita mesti ubah jenis kalkulatornya menjadi kalkulator programmer. Lalu kita pilih nilai desimal. Kita ketik nilai 37. Dan lihat ke nilai biner-nya, yaitu 0010 0101. Sudah cocok ya. Berarti nilai biner 00100101 adalah sama dengan nilai desimal 37.
Ini adalah daftar operator bitwise. Empat operator pertamanya mirip dengan operator logika ya. Hanya saja pada operator logika, kita memproses tipe data boolean. Sedangkan operator bitwise digunakan untuk memproses angka integer secara bit per bit.
Dua operator bagian paling bawah mungkin masih asing buat teman-teman. Shift Left berfungsi untuk menggeser semua bit ke arah kiri. Sedangkan Shift Right berfungsi untuk menggeser semua bit ke arah kanan.
Yang perlu diperhatikan disini adalah simbol yang digunakan untuk semua operator bitwise. Untuk operasi And dan Or, kita menggunakan simbol yang sama dengan operator logika. Hanya saja pada operator logika, kita harus menggunakan simbolnya sebanyak 2 kali, sedangkan pada operator bitwise kita hanya menggunakan simbolnya sebanyak 1 kali.
Disini teman-teman mesti memperhatikan. Kalau misalkan kita sedang membuat perintah if dan ingin menggunakan operator logika and, tapi kita hanya menggunakan satu buah tanda dan. Komputer akan memproses kode kita sebagai bitwise operator tanpa ada pesan kesalahan. Namun kita mendapatkan hasil yang tidak sesuai dengan harapan kita. Jadi teman-teman mesti ingat dan berhati-hati karena disini ada potensi terjadinya bugs yang akan sulit untuk ditelusuri.
Sampai disini mungkin teman-teman masih bingung ya, bagaimana sih cara kerja dari operator bitwise? Nah, agar lebih enak, penjelasannya akan saya lanjutkan sambil praktek ya.
Misalkan kita buat variable $a yang kita isi dengan bilangan biner seperti pada slide tadi. Dari video sebelumnya kita sudah tau ya, untuk mengisikan bilangan biner, kita mesti dahulu dengan tanda 0b. Kemudian kita isikan nilainya yaitu 00100101. Kalau kita coba cetak nilai dari variable $a, maka kita gunakan perintah
echo $a . PHP_EOL;
Kalau kita jalankan maka kita mendapatkan hasil 37. Hasilnya adalah angka desimal ya. Karena secara default angka yang dilihat oleh manusia adalah desimal. Bagaimana kalau kita ingin menampilkan hasilnya dalam bentuk biner? Maka kita bisa menggunakan perintah printf. Sebagai formatnya kita masukkan ā%b\nā, kemudian kita tampilkan nilai dari variable $a. %b berarti kita hendak menampilkan angka dalam format biner. Kalau kita jalankan, maka pertama kita dapat angka dalam format biner dahulu ya. Setelah itu barulah kita mendapatkan format desimalnya.
Namun kalau dilihat lagi, ternyata format binernya masih belum seperti yang kita mau ya. Yang kita mau adalah 8 digit. Sedangkan yang tampil hanya sampai ke angka 1 terakhir. Semua angka 0 yang berada di sebelah kiri dihapus. Untuk menampilkan angka 0 di bagian depan, maka formatnya kita ubah menjadi %08b. Artinya kita menampilkan angka biner sebanyak 8 digit, apabila bagian depan angka adalah kosong maka kita isi dengan angka 0. Setelah kita jalankan, barulah kita mendapatkan angka biner 00100101.
Selanjutnya kita buat variable $b, dengan nilai 0b00111110. Lalu kita buat variable result, dimana kita menyimpan hasil operasi bitwise $a & $b. Nah, untuk perintah format kita copy paste sebanyak 2 kali ya. Kita gunakan untuk mencetak variable &b dan $result. Sedangkan di tengahnya kita beri tanda pembatas ditambah simbol operasinya &.
Kita beri tanda baris baru lagi. Kemudian kita lakukan hal yang sama untuk perintah echo, agar menampilkan variable $a, $b dan $result dalam format desimal.
Nah, untuk mengetahui apa yang terjadi pada operasi bitwise and, kita lihat ke hasil program kita ya. Ingat bahwa operasi bitwise dilakukan secara bit per bit, jadi kita harus melihat angka dalam format biner. Dari operator logika, kita sudah tau ya, kalau operasi and hanya menghasilkan nilai benar, kalau kedua operandnya bernilai benar. Sisanya menghasilkan nilai salah. Benar disini adalah nilai 1. Sedangkan salah adalah nilai 0.
Kita lihat bit dari variable $a dan $b dimulai dari yang paling kanan. Satu dan nol, menghasilkan nol. Kemudian digit kedua. Nol dan satu menghasilkan nol. Yang ketiganya, satu dan satu, nah ini baru menghasilkan satu ya. Lanjut. Nol dan satu adalah nol. Nol dan satu lagi menghasilkan nol. Kemudian satu dan satu menghasilkan satu. Dan sisanya nol. Jadi kalau kita melakukan bitwise and pada variable $a dan $b, maka hasilnya adalah 0010 0100. Atau bilangan desimalnya adalah 36.
Jadi kalau teman-teman melihatnya dari sistem bilangan biner, bisa mengerti ya mengapa operasi ini bisa menghasilkan nilai 0010 0100. Jangan melihat dari nilai desimalnya. Kalau kita melihatnya sebagai 37 dan 62 menghasilkan nilai 36, kita akan bingung sendiri, bagaimana jalannya sehingga bisa menghasilkan nilai seperti itu.
Operasi and bisa kita gunakan untuk mencari bilangan ganjil. Misalkan kita komentari dahulu nilai dari variable $a dan $b. Kita buat penggantinya ya misalnya $a = 55 dan $b = 1. Nah, semua nilai yang ganjil, kalau kita lakukan operasi dan dengan angka 1, akan menghasilkan nilai 1. Karena semua nilai ganjil kalau dilihat secara biner, digit di bagian paling kanannya bernilai 1. Sedangkan kalau nilai variable $a kita ganti menjadi genap, maka kalau kita operasikan dengan dan 1 akan menghasilkan nilai 0.
Jadi disini kita sudah belajar cara baru mencari bilangan ganjil ya. Bilangan ganjil akan menghasilkan nilai 1 apabila kita melakukan operasi bitwise and dengan nilai 1. Operasi ini jauh lebih cepat dibandingkan dengan cara yang biasa digunakan oleh programmer, yaitu dimodulus dengan nilai 2. Nanti teman-teman bisa mencoba-coba sendiri lagi ya.
Kita kembalikan dahulu kode ke semula. Lalu kita copy paste ke bawahnya ya. Kode yang aslinya kita ubah menjadi komentar. Lalu kita tambahkan judul Operasi Bitwise And. Kita lanjutkan ke operator berikutnya. Kita berikan dulu judulnya Operasi Bitwise Or. Lalu kita ubah ya semua simbol & menjadi |.
Sama seperti sebelumnya, untuk mengetahui apa yang terjadi pada operasi bitwise or, maka kita melihat ke hasil dalam format biner. Kita sudah tau dari video sebelumnya, operasi or akan menghasilkan nilai benar apabila salah satu atau kedua operandnya bernilai benar. Operasi or akan menghasilkan nilai salah apabila kedua operandnya salah.
Kita lihat lagi dari bit paling belakang ya. 1 or 0 hasilnya 1. 0 or 1 hasilnya 1. 1 or 1 hasilnya 1. Kemudian 0 dan 1 hasilnya 1. 0 dan 1 lagi, hasilnya 1. Dan 1 or 1 hasilnya 1. Sisanya adalah 0. Jadi hasil dari operasi bitwise or adalah 0011 1111. Kalau kita lihat dari bilangan desimalnya, 37 or 62 menghasilkan 63.
Kita copy paste lagi ya. Yang operasi OR diubah menjadi komentar. Kita lanjutkan ke materi XOR. Untuk operasi XOR, kita menggunakan simbol topi. Pada keyboard, simbol ini bisa kita temukan pada angka 6. Operasi XOR akan menghasilkan nilai 1 apabila nilai dari kedua operand berbeda dan menghasilkan nilai 0 apabila nilai dari kedua operand sama.
Kita periksa hasilnya mulai dari bit paling belakang. 1 xor 0 hasilnya 1. 0 xor 1 hasilnya 0. 1 xor 1 hasilnya 0, karena nilai dari kedua operand sama-sama 1. Kemudian 0 xor 1 nilainya 1. 0 xor 1 nilainya 1. 1 xor 1 nilainya 0. Dan sisanya 0 xor 0 nilainya 0.
Maka hasil dari operasi adalah 0001 1011. Atau nilai desimalnya adalah 27.
Berikutnya yang sedikit tricky adalah operator not. Untuk melihat bagaimana cara kerja operator ini, maka kita mesti melihat nilai biner sebagai angka lengkap 64 bit. Oleh karena itu terminalnya kita pindahkan dahulu menjadi di bawah ya. Agar angkanya bisa kelihatan lengkap.
Kita copy paste kode sebelumnya. Untuk operator not, kita hapus variable $b dan kode untuk menunjukkan nilai $b. Kita ubah $result menjadi not $a. Ingat disini not menggunakan simbol tilde, pada keyboard berada di sebelah kiri angka 1. Jangan menggunakan tanda seru karena itu adalah operator logika. Pada format printf, kita ganti menjadi %064b untuk menunjukkan keseluruhan 64 bit.
Kita jalankan ya. Kita bisa lihat bahwa operasi not akan merubah semua bit yang bernilai 0 menjadi 1, dan semua bit yang bernilai 1 menjadi 0.
Yang perlu diperhatikan adalah bit yang berada di paling kiri. Berhubung PHP menggunakan tipe data signed integer, maka bit yang paling kiri ini menunjukkan apakah angka kita adalah bilangan positif atau negatif. Apabila bit paling kiri bernilai 0 artinya bilangan positif. Sedangkan kalau nilainya 1 artinya bilangan negatif.
Berhubung operasi not mengubah nilai 0 menjadi 1, maka nilai desimalnya berubah menjadi negatif. Jadi kalau kita melihat ke nilai desimalnya, not 37 menghasilkan minus 38. Nilai positifnya berubah menjadi negatif. Sedangkan angkanya bertambah satu.
Kalau misalnya angka -38 ini kita operasikan lagi dengan not, maka hasilnya kembali ke 37.
Yang menarik disini adalah nilai not dari 0. Apabila secara biner angkanya nol semua ini menunjukkan nilai desimal 0. Setelah kita operasikan dengan not, maka secara biner semua angkanya berubah menjadi 1. Ini menjadi nilai awal dari bilangan negatif, yaitu -1. Berhubung bilangan positif dimulai dari angka 0, sedangkan bilangan negatif dimulai dari angka -1. Jadi pada saat kita mengubah bilangan positif menjadi negatif menggunakan operator not, maka angkanya akan naik satu. Sebaliknya pada saat kita mengubah bilangan negatif menjadi positif menggunakan operator not, maka angkanya akan turun satu.
Kita copy paste lagi kodenya. Selanjutnya kita akan mencoba operator shift left. Operator ini menggunakan tanda <<. Misalkan kita nilai dari variable $a kita geser ke kiri sebanyak 1 digit.
Perhatikan hasilnya. Semua angka 1 pada bilangan biner bergeser ke kiri sebanyak 1 digit. Sedangkan bagian paling kanan biner diisi dengan angka 0.
Kalau kita ubah kodenya menjadi shift left 2 kali, maka bilangan binernya bergeser ke kiri sebanyak 2 digit. Begitu seterusnya ya, kalau kita coba hingga ke 57 kali, maka angka 1-nya berpindah hingga ke digit kedua dari paling kiri. Nilai desimalnya menjadi tinggi sekali karena digit kedua ini merepresentasikan nilai 2 pangkat 62.
Dan yang menariknya kalau kita tambahkan lagi shift leftnya menjadi 58 kali, maka digit pertama dari bilangan biner berubah menjadi 1. Dan berhubung digit pertama ini menandakan bilangan positif negatif, maka kalau kita lihat di bilangan desimal nilainya berubah menjadi nilai negatif.
Kita copy paste kodenya. Kita mencoba operator terakhir yaitu shift right. Operator ini menggunakan tanda >>. Misalkan nilai variable $a kita geser ke kanan sebanyak 2 digit.
Sebagai hasilnya, semua angka 1 pada bilangan biner bergeser ke kanan sebanyak 1 kali. Kalau kita lihat di bilangan desimalnya, hasilnya adalah nilai awal dibagi 2 dan dibulatkan ke bawah.
Kalau kita ganti menjadi shift right sebanyak 2 kali, maka bilangan biner bergeser ke kanan sebanyak 2 kali. Hasil bilangan desimalnya seperti nilai awal dibagi 4 dan dibulatkan ke bawah. Dan begitu seterusnya.
Oke ya, pada video ini kita sudah belajar mengenai bilangan biner dan operasi bitwise. Bagi teman-teman yang baru belajar pemograman, materi pada video ini mungkin lebih sulit untuk dicerna. Untuk mengakalinya, teman-teman bisa menonton video ini secara berulang-ulang, dan bisa sambil mencoba-coba sendiri di komputer masing-masing.
Nantinya operasi bitwise ini akan berguna pada saat kita hendak melakukan optimasi pada kode kita. Seperti yang telah kita pelajari barusan, untuk menentukan apakah bilangan genap atau ganjil, menggunakan operator and akan jauh lebih cepat dibandingkan dengan operator modulus.
Operasi bitwise juga bisa digunakan untuk menghemat space penyimpanan data. Pada satu buah integer 64 bit, kita bisa menyimpan 64 buah nilai boolean. Contoh penggunaan bit seperti ini adalah pada file sistem linux, dimana setiap file memiliki penanda keamanan apakah boleh ditulis, dibaca atau dieksekusi oleh owner, grup atau other. File sistem ini menyimpan 9 buah boolean dalam bentuk bit untuk menghemat penggunaan harddisk.
Contoh penggunaan lainnya adalah pada konfigurasi PHP. PHP menggunakan bit untuk menunjukkan jenis error-nya. Jadi kalau kita ingin menambah atau mengurangi jenis error yang ditampilkan, maka kita harus menggunakan operasi bitwise.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.