Mencoba Bit Field
Beberapa waktu lalu saya mencari dan mencoba memahami tentang salah satu konsep pemrograman yang sebenarnya sudah saya ketahui beberapa waktu lalu namun belum sepenuhnya paham dan belum sempat untuk mengimplementasikannya pada sebuah kasus. Setelah beberapa kali membaca dari sumber-sumber yang saya dapat, artikel ini akan membahas tentang bit field menurut se-_penangkap_-an saya …
Bit Field adalah istilah yang digunakan pada pemrograman komputer untuk pemetaan bidang pada sebuah data yang direpresentasikan dengan sebuah angka (integral) dimana nantinya akan ditranslasi menjadi bilangan biner sehingga akan tampak fields yang dimaksud, setiap bit yang dialamatkan memiliki artian khusus menurut dengan rancangan logika pembuat kode.
Untuk lebih jelasnya bisa diambil contoh untuk implementasi bit field ini. Contoh yang akan saya gunakan adalah tentang sistem ijin sistem operasi berbasis linux. Bisa dilihat melalui perintah
$ chmod 777 file.txt
dari man page chmod program tersebut berfungsi untuk mengganti file mode bits. Dari angka 777 tersebut bisa diambil salah satunya saja yaitu angka 7, angka 7 disini memiliki arti nilai dari user memiliki akses untuk read, write, execute (rwx). Bagaimana mungkin yang tadinya hanya sebuah angka 7, dapat diartikan menjadi user diberikan ijin untuk dapat membaca, memperbaharui, dan mengeksekusi file tersebut? Angka 7 tersebut merupakan kombinasi dari angka lainnya yaitu 4, 2, dan 1. Saat dilihat dari angka 4, 2, 1 tersebut mungkin belum nampak bagaimana cara bit field ini bekerja, namun ketika mengubahnya menjadi bilangan biner maka akan terlihat sesuatu seperti ini.
angka | arti | biner | |||
---|---|---|---|---|---|
4 | read |
|
|||
2 | write |
|
|||
1 | execute |
|
read | write | execute | field |
---|---|---|---|
7 | nilai | ||
1 | 1 | 1 | nilai biner |
Dari table tersebut dapat terlihat dengan lebih jelas maksud dibalik angka 7 itu. Pada saat dikonversi menjadi bilangan biner angka tersebut akan menjadi tampak seperti bilangan biner 3 digit ->
1 | 0 | 0 | 4 | |
---|---|---|---|---|
0 | 1 | 0 | 2 | |
0 | 0 | 1 | 1 | | (or) |
1 | 1 | 1 | 7 |
Angka 7 tersebut merupakan hasil dari operasi bitwise seperti kode berikut
value = 4|2|1
Dengan begitu, hanya sebuah bilangan decimal dapat merepresentasi berbagai macam arti seperti contoh tersebut. Lalu bagaimana cara mengetahui bahwa nilai angka tersebut memiliki arti yang seharusnya? Contoh listing kode PHP berikut mungkin akan memberikan gambaran bagaimana cara mem-_parsing_ arti dari sebuah angka tersebut.
<?php
define('PERMISSION_READ', 4);
define('PERMISSION_WRITE', 2);
define('PERMISSION_EXECUTE', 1);
$value = PERMISSION_READ | PERMISSION_WRITE | PERMISSION_EXECUTE;
check_permission($value);
$value = PERMISSION_READ;
check_permission($value);
$value = PERMISSION_EXECUTE;
check_permission($value);
$value = PERMISSION_READ | PERMISSION_READ | PERMISSION_EXECUTE;
check_permission($value);
$value = PERMISSION_READ | PERMISSION_WRITE | PERMISSION_EXECUTE;
check_permission($value);
function check_permission($value){
echo "representation $value means ";
echo $value & PERMISSION_READ ? "r" : "-";
echo $value & PERMISSION_WRITE ? "w" : "-";
echo $value & PERMISSION_EXECUTE ? "x" : "-";
echo "\n";
}
Yang perlu diketahui adalah saya sebenarnya tidak terlalu meng-_oprek_ kedalam kode tentang sistem ijin ini. Kemungkinan logika yang dipakai berbeda dengan pemahaman saya, namun yang saya lihat adalah betapa jelasnya contoh sistem ini jika bekerja menggunakan konsep bit field, jadi saya menggunakan contoh angka dari salah perintah sistem operasi berbasis linux tersebut.