Dalam dunia komputasi dan matematika, sistem bilangan adalah fondasi yang memungkinkan representasi dan manipulasi data. Kita semua akrab dengan sistem bilangan desimal (basis 10), tetapi ada sistem lain yang sama pentingnya, seperti biner (basis 2), heksadesimal (basis 16), dan oktal (basis 8). Sistem oktal, meskipun mungkin tidak sepopuler biner atau heksadesimal di era modern, memiliki sejarah yang kaya dan aplikasi spesifik yang membuatnya tetap relevan, terutama dalam konteks sistem komputer lama dan manajemen izin file di sistem operasi berbasis Unix.
Artikel ini akan mengupas tuntas sistem bilangan oktal, mulai dari definisi dan sejarahnya, perbandingannya dengan sistem bilangan lain, metode konversi yang mendetail, prinsip aritmetikanya, hingga aplikasi praktisnya dalam komputasi. Dengan pemahaman yang mendalam tentang oktal, kita dapat mengapresiasi keindahan dan efisiensi representasi numerik dalam berbagai konteks teknologi.
Sistem bilangan oktal, juga dikenal sebagai basis 8, adalah sistem bilangan posisional yang menggunakan delapan simbol unik untuk merepresentasikan nilai numerik. Simbol-simbol ini biasanya adalah angka 0, 1, 2, 3, 4, 5, 6, dan 7. Setiap digit dalam bilangan oktal memiliki nilai tempat yang merupakan pangkat dari 8. Sebagai contoh, dalam bilangan oktal, digit paling kanan merepresentasikan satuan (80), digit berikutnya ke kiri merepresentasikan delapanan (81), berikutnya enam puluh empatan (82), dan seterusnya.
Konsep dasar sistem bilangan oktal mirip dengan sistem desimal yang kita gunakan sehari-hari. Perbedaannya terletak pada jumlah simbol yang tersedia dan basis yang digunakan untuk menghitung nilai tempat. Dalam desimal, kita memiliki 10 simbol (0-9) dan basis 10. Dalam oktal, kita memiliki 8 simbol (0-7) dan basis 8.
Untuk memahami bagaimana nilai direpresentasikan dalam oktal, mari kita lihat beberapa contoh sederhana:
1 sama dengan angka desimal 1.7 sama dengan angka desimal 7.10 bukan sepuluh. Karena tidak ada angka 8 atau 9 di oktal, setelah 7, angka berikutnya adalah 10. Angka oktal 10 berarti 1 kelompok delapan dan 0 satuan, sehingga sama dengan (1 * 8^1) + (0 * 8^0) = 8 + 0 = 8 dalam desimal.17 sama dengan (1 * 8^1) + (7 * 8^0) = 8 + 7 = 15 dalam desimal.20 sama dengan (2 * 8^1) + (0 * 8^0) = 16 + 0 = 16 dalam desimal.Sistem oktal sangat relevan karena hubungannya yang erat dengan sistem bilangan biner (basis 2). Setiap digit oktal dapat direpresentasikan dengan tepat tiga digit biner. Ini adalah kunci mengapa oktal sering digunakan sebagai cara yang lebih ringkas dan mudah dibaca untuk merepresentasikan angka biner yang panjang, terutama di masa lalu ketika memori komputer masih sangat terbatas dan instruksi arsitektur seringkali berukuran kelipatan tiga bit.
Penggunaan sistem bilangan oktal memiliki akar yang dalam dalam sejarah komputasi, meskipun konsep sistem basis 8 sendiri mungkin lebih tua. Pada awal-awal pengembangan komputer, mesin-mesin bekerja dengan bit biner (0 dan 1). Namun, deretan panjang angka biner sangat sulit dibaca, ditulis, dan diproses oleh manusia. Di sinilah oktal menemukan kegunaannya.
Komputer generasi awal seringkali memiliki arsitektur di mana panjang word atau instruksi adalah kelipatan dari tiga bit, seperti 6 bit, 12 bit, atau 18 bit. Dalam konteks ini, oktal menjadi jembatan alami antara representasi biner mesin dan representasi yang lebih mudah dipahami manusia. Mengapa demikian? Karena 23 = 8. Artinya, setiap tiga bit biner dapat dengan mudah dan langsung dipetakan ke satu digit oktal.
Sebagai contoh, jika sebuah komputer memiliki arsitektur 12-bit, angka biner 110101011100 dapat dengan mudah dipecah menjadi empat kelompok tiga bit: 110, 101, 011, dan 100. Masing-masing kelompok ini kemudian dapat diubah menjadi digit oktal tunggal: 6, 5, 3, dan 4. Jadi, angka biner panjang tersebut menjadi 6534 dalam oktal. Ini jauh lebih ringkas dan tidak rawan kesalahan dibandingkan bekerja dengan deretan biner asli.
Komputer seperti UNIVAC 1050, PDP-8, dan IBM mainframe generasi awal banyak menggunakan oktal dalam instruksi mesin, register, dan alamat memori. Para programmer akan menulis kode dalam bahasa assembly atau bahkan bahasa mesin menggunakan oktal untuk mempermudah penulisan dan debugging. Misalnya, kode operasi instruksi dapat diwakili dalam oktal, alamat memori dapat ditulis dalam oktal, dan nilai-nilai data sering dicetak dalam format oktal dalam memory dump.
Namun, seiring waktu, arsitektur komputer beralih ke panjang word yang merupakan kelipatan dari empat bit (misalnya 8 bit untuk byte, 16 bit, 32 bit, 64 bit). Untuk arsitektur berbasis byte (8 bit), heksadesimal (basis 16) menjadi lebih dominan karena setiap digit heksadesimal dapat mewakili empat bit (24 = 16). Ini berarti satu byte (8 bit) dapat direpresentasikan dengan tepat dua digit heksadesimal. Karena byte menjadi unit dasar penyimpanan dan pemrosesan, heksadesimal lebih cocok untuk merepresentasikan alamat dan data dalam sistem modern.
Meskipun demikian, oktal tidak sepenuhnya menghilang. Ia masih menemukan ceruknya dalam aplikasi tertentu, terutama dalam sistem operasi yang berakar pada Unix, seperti Linux, FreeBSD, dan macOS, di mana ia digunakan untuk mengatur izin akses file. Ini akan kita bahas lebih lanjut dalam bagian aplikasi.
Meskipun heksadesimal kini lebih dominan, pemahaman mengapa oktal pernah begitu penting dan masih memiliki relevansi kecil saat ini sangat krusial. Alasan utama terletak pada efisiensinya dalam merepresentasikan bilangan biner.
Seperti yang telah dijelaskan, hubungan matematis 23 = 8 memungkinkan setiap tiga bit biner dikonversi langsung menjadi satu digit oktal. Ini secara drastis mengurangi panjang string biner, membuatnya lebih mudah bagi programmer untuk membaca, menulis, dan debug. Bayangkan bekerja dengan angka biner 10111001011100101. Tanpa oktal, ini adalah deretan bit yang panjang dan rawan kesalahan. Dengan oktal, kita kelompokkan: 101 110 010 111 001 010. Ini menjadi 562712 dalam oktal. Jauh lebih mudah dikelola!
Deretan panjang 0s dan 1s sangat mudah menyebabkan kesalahan saat disalin atau dibaca. Dengan oktal, jumlah digit yang harus ditangani berkurang secara signifikan, sehingga mengurangi kemungkinan kesalahan transkripsi atau interpretasi.
Pada masa komputer awal, perangkat output seperti printer dan layar (jika ada) sangat terbatas. Mencetak angka dalam oktal membutuhkan lebih sedikit karakter daripada biner, yang menghemat sumber daya dan waktu. Ini juga memudahkan para insinyur dan operator untuk membaca "memory dump" atau representasi internal mesin.
Beberapa arsitektur komputer awal dirancang dengan lebar kata (word length) yang merupakan kelipatan dari tiga bit, seperti 6, 12, 18, 24, atau 36 bit. Untuk arsitektur semacam ini, oktal adalah pilihan alami untuk merepresentasikan isi register, alamat memori, dan instruksi. Contoh ikonik adalah DEC PDP-8, sebuah minicomputer 12-bit yang sangat populer, di mana oktal adalah sistem bilangan pilihan untuk pemrograman.
Meskipun heksadesimal telah mengambil alih dominasi dalam sebagian besar area komputasi modern, oktal masih mempertahankan perannya dalam konteks tertentu:
chmod)Ini adalah aplikasi paling umum dan paling terlihat dari sistem oktal saat ini. Sistem operasi seperti Linux, macOS, dan sistem Unix lainnya menggunakan angka oktal untuk menentukan izin akses file dan direktori. Setiap digit oktal (0-7) mewakili kombinasi izin baca (r), tulis (w), dan eksekusi (x) untuk pemilik file, grup, dan pengguna lain. Kita akan membahas ini secara rinci di bagian aplikasi.
Contoh: chmod 755 myfile.txt
Angka 755 adalah bilangan oktal yang merepresentasikan set izin tertentu. Pemahaman oktal sangat penting untuk manajemen sistem Unix.
Banyak bahasa pemrograman modern masih mendukung literal oktal. Misalnya, di C, C++, Java, dan Python, angka yang diawali dengan 0 (atau 0o di Python modern dan beberapa bahasa lain) diinterpretasikan sebagai oktal. Ini memungkinkan programmer untuk bekerja dengan nilai-nilai yang secara alami berbasis oktal, seperti izin file, tanpa harus mengkonversinya secara manual ke desimal.
Python: permission = 0o755
C/C++: int permission = 0755; // Perhatikan awalan '0'
JavaScript: let permission = 0o755;
Studi tentang oktal tetap menjadi bagian integral dari pendidikan ilmu komputer. Mempelajari oktal membantu siswa memahami konsep sistem bilangan posisional secara umum, serta hubungan antara biner, oktal, desimal, dan heksadesimal. Ini memperkuat pemahaman tentang bagaimana komputer memproses dan merepresentasikan data.
Dalam beberapa sistem tertanam (embedded systems) atau ketika bekerja dengan perangkat keras atau perangkat lunak warisan (legacy systems) yang dirancang di era ketika oktal lebih umum, pemahaman tentang oktal masih sangat diperlukan.
Meskipun perannya telah berkurang, oktal tetap menjadi bagian penting dari ekosistem komputasi, terutama di area yang telah mapan dan terbukti efisien.
Untuk memahami oktal lebih dalam, penting untuk membandingkannya dengan sistem bilangan lain yang umum digunakan: desimal, biner, dan heksadesimal.
123 dalam desimal berarti (1 * 10^2) + (2 * 10^1) + (3 * 10^0) = 100 + 20 + 3 = 123.1111011 dalam biner berarti (1 * 2^6) + (1 * 2^5) + (1 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 64 + 32 + 16 + 8 + 0 + 2 + 1 = 123 (desimal).173 dalam oktal berarti (1 * 8^2) + (7 * 8^1) + (3 * 8^0) = (1 * 64) + (7 * 8) + (3 * 1) = 64 + 56 + 3 = 123 (desimal).7B dalam heksadesimal berarti (7 * 16^1) + (B * 16^0) = (7 * 16) + (11 * 1) = 112 + 11 = 123 (desimal).| Desimal | Biner | Oktal | Heksadesimal |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
Dari tabel ini, terlihat jelas hubungan langsung antara biner, oktal, dan heksadesimal. Tiga bit biner selalu membentuk satu digit oktal, dan empat bit biner selalu membentuk satu digit heksadesimal. Inilah alasan utama mengapa oktal dan heksadesimal menjadi representasi "shortcut" yang populer untuk bilangan biner yang panjang.
Kemampuan untuk mengkonversi bilangan antar sistem adalah keterampilan fundamental dalam ilmu komputer. Mari kita pelajari metode konversi untuk oktal secara mendetail.
Untuk mengkonversi bilangan oktal ke desimal, kita menggunakan metode penjumlahan nilai tempat (posisi). Setiap digit oktal dikalikan dengan 8 pangkat posisi digit tersebut, kemudian hasilnya dijumlahkan.
Rumus umum untuk bilangan oktal d_n...d_1d_0.d_-1d_-2...d_-m adalah:
(d_n * 8^n) + ... + (d_1 * 8^1) + (d_0 * 8^0) + (d_-1 * 8^-1) + (d_-2 * 8^-2) + ... + (d_-m * 8^-m)
25 ke Desimal2 berada pada posisi 1 (pangkat 81).5 berada pada posisi 0 (pangkat 80).2 * 8^1 = 2 * 8 = 165 * 8^0 = 5 * 1 = 516 + 5 = 21Jadi, 25_8 = 21_10.
173 ke Desimal1 pada posisi 2 (82).7 pada posisi 1 (81).3 pada posisi 0 (80).1 * 8^2 = 1 * 64 = 647 * 8^1 = 7 * 8 = 563 * 8^0 = 3 * 1 = 364 + 56 + 3 = 123Jadi, 173_8 = 123_10.
4072 ke Desimal4 pada posisi 3 (83).0 pada posisi 2 (82).7 pada posisi 1 (81).2 pada posisi 0 (80).4 * 8^3 = 4 * 512 = 20480 * 8^2 = 0 * 64 = 07 * 8^1 = 7 * 8 = 562 * 8^0 = 2 * 1 = 22048 + 0 + 56 + 2 = 2106Jadi, 4072_8 = 2106_10.
10.4 ke Desimal1 pada posisi 1 (81).0 pada posisi 0 (80).4 pada posisi -1 (8-1).1 * 8^1 = 1 * 8 = 80 * 8^0 = 0 * 1 = 04 * 8^-1 = 4 * (1/8) = 4/8 = 0.58 + 0 + 0.5 = 8.5Jadi, 10.4_8 = 8.5_10.
Konversi bilangan desimal ke oktal dapat dilakukan dengan dua metode utama: metode pembagian berulang untuk bagian integer dan metode perkalian berulang untuk bagian pecahan.
Bagi bilangan desimal secara berulang dengan 8. Sisa pembagian adalah digit oktal, dimulai dari digit paling kanan (LSD - Least Significant Digit) hingga digit paling kiri (MSD - Most Significant Digit).
21 ke Oktal21 / 8 = 2 sisa 5 (digit paling kanan)2 / 8 = 0 sisa 2 (digit berikutnya)Baca sisa dari bawah ke atas: 25.
Jadi, 21_10 = 25_8.
123 ke Oktal123 / 8 = 15 sisa 315 / 8 = 1 sisa 71 / 8 = 0 sisa 1Baca sisa dari bawah ke atas: 173.
Jadi, 123_10 = 173_8.
2106 ke Oktal2106 / 8 = 263 sisa 2263 / 8 = 32 sisa 732 / 8 = 4 sisa 04 / 8 = 0 sisa 4Baca sisa dari bawah ke atas: 4072.
Jadi, 2106_10 = 4072_8.
Untuk bagian pecahan, kalikan pecahan dengan 8 secara berulang. Bagian integer dari hasil perkalian adalah digit oktal, dimulai dari digit paling kiri setelah titik oktal.
0.5 ke Oktal Pecahan0.5 * 8 = 4.0. Ambil bagian integer 4 (digit pertama setelah titik oktal).0.0, sehingga proses berhenti.Jadi, 0.5_10 = 0.4_8.
0.125 ke Oktal Pecahan0.125 * 8 = 1.0. Ambil bagian integer 1.0.0, proses berhenti.Jadi, 0.125_10 = 0.1_8.
0.75 ke Oktal Pecahan0.75 * 8 = 6.0. Ambil bagian integer 6.0.0, proses berhenti.Jadi, 0.75_10 = 0.6_8.
123.5 ke OktalGabungkan hasil dari konversi bagian integer dan pecahan.
123 ke oktal: 173 (dari Contoh 2 di atas).0.5 ke oktal: 0.4 (dari Contoh 4 di atas).Jadi, 123.5_10 = 173.4_8.
Ini adalah salah satu konversi paling langsung karena setiap digit oktal dapat direpresentasikan dengan tepat tiga digit biner.
| Digit Oktal | Ekuivalen Biner (3-bit) |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
52 ke Biner5 (oktal) = 101 (biner)2 (oktal) = 010 (biner)101010Jadi, 52_8 = 101010_2.
173 ke Biner1 (oktal) = 001 (biner)7 (oktal) = 111 (biner)3 (oktal) = 011 (biner)001111011 atau 1111011.Jadi, 173_8 = 001111011_2 atau 1111011_2.
6.34 ke Biner6 (oktal) = 110 (biner)3 (oktal) = 011 (biner)4 (oktal) = 100 (biner)110.011100Jadi, 6.34_8 = 110.011100_2.
Untuk mengkonversi biner ke oktal, kita kelompokkan bit biner menjadi tiga-tiga, dimulai dari titik biner (atau dari kanan jika tidak ada titik biner). Jika ada kelompok yang tidak memiliki tiga bit, tambahkan nol di kiri (untuk bagian integer) atau di kanan (untuk bagian pecahan) untuk melengkapi tiga bit tersebut.
101010 ke Oktal101010101 (biner) = 5 (oktal)010 (biner) = 2 (oktal)52Jadi, 101010_2 = 52_8.
1111011 ke Oktal001 (ini adalah 1 asli dengan dua nol tambahan)111011001 (biner) = 1 (oktal)111 (biner) = 7 (oktal)011 (biner) = 3 (oktal)173Jadi, 1111011_2 = 173_8.
1011.0111 ke Oktal011 (untuk 11 asli)1 (tambahkan 00 menjadi 001)011100 (untuk 1 asli, tambahkan 00)001 = 1011 = 3011 = 3100 = 413.34Jadi, 1011.0111_2 = 13.34_8.
Konversi dari oktal ke heksadesimal (dan sebaliknya) paling mudah dilakukan dengan menggunakan biner sebagai perantara. Ini karena tidak ada hubungan langsung antara basis 8 dan basis 16 yang sederhana seperti antara basis 2 dan basis 8/16.
| Digit Heksadesimal | Ekuivalen Biner (4-bit) |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
| A | 1010 |
| B | 1011 |
| C | 1100 |
| D | 1101 |
| E | 1110 |
| F | 1111 |
752 ke Heksadesimal7_8 = 111_25_8 = 101_22_8 = 010_2111101010_2
0001 (ditambahkan tiga nol)111010100001 1110 1010
0001_2 = 1_161110_2 = E_161010_2 = A_161EA
Jadi, 752_8 = 1EA_16.
307.4 ke Heksadesimal3_8 = 011_20_8 = 000_27_8 = 111_24_8 = 100_2011000111.100_2
0011 0001 11 (tambahkan 0 di kiri menjadi 0011 0001 0111)100 (tambahkan 0 di kanan menjadi 1000)0011 0001 0111 . 1000
0011_2 = 3_160001_2 = 1_160111_2 = 7_161000_2 = 8_16127.8 (perhatikan: 011000111, setelah padding dan regrouping menjadi 0011 0001 0111)
Mari kita perbaiki regrouping:
Biner: 011000111.100
Bagian integer: 011000111. Kelompokkan 4-bit dari kanan:
0111 (7)0001 (1)011 (tambahkan 0 di kiri menjadi 0011 = 3)317
Bagian pecahan: 100. Kelompokkan 4-bit dari kiri:
1000 (8) (tambahkan 0 di kanan).8
Jadi, 307.4_8 = 317.8_16.
Sama seperti konversi sebaliknya, ini juga paling mudah menggunakan biner sebagai perantara.
1EA ke Oktal1_16 = 0001_2E_16 = 1110_2A_16 = 1010_2000111101010_2
000111101010000 111 101 010
000_2 = 0_8 (bisa diabaikan jika di awal)111_2 = 7_8101_2 = 5_8010_2 = 2_8752
Jadi, 1EA_16 = 752_8.
F3.C ke OktalF_16 = 1111_23_16 = 0011_2C_16 = 1100_211110011.1100_2
111 100 11 (tambahkan 0 di kiri menjadi 011)
011 (3)110 (6)011 (3)110 0 (tambahkan 00 di kanan menjadi 000)
110 (6)000 (0)011 110 011 . 110 000
011_2 = 3_8110_2 = 6_8011_2 = 3_8110_2 = 6_8000_2 = 0_8363.60
Jadi, F3.C_16 = 363.60_8.
Melakukan operasi aritmetika (penjumlahan, pengurangan, perkalian, pembagian) dalam sistem bilangan oktal mengikuti prinsip yang sama dengan sistem desimal, hanya saja kita bekerja dengan basis 8. Ini berarti "carry" atau "borrow" terjadi setiap kali nilai mencapai atau melampaui 8.
Saat menjumlahkan dua digit oktal, jika hasilnya 8 atau lebih, kurangi 8 dari hasil dan bawa (carry) 1 ke kolom berikutnya (digit di sebelah kiri).
25_8 + 13_85 + 3 = 8. Karena hasilnya 8, tulis 0 dan carry 1.2 + 1 + carry 1 = 4.Hasilnya: 40_8.
Verifikasi (konversi ke desimal): 25_8 = 21_10, 13_8 = 11_10. 21 + 11 = 32_10.
40_8 = (4 * 8^1) + (0 * 8^0) = 32 + 0 = 32_10. Hasil cocok.
77_8 + 1_87 + 1 = 8. Tulis 0, carry 1.7 + carry 1 = 8. Tulis 0, carry 1.1.Hasilnya: 100_8.
Verifikasi: 77_8 = (7*8+7) = 63_10. 1_8 = 1_10. 63 + 1 = 64_10.
100_8 = (1*8^2) + (0*8^1) + (0*8^0) = 64 + 0 + 0 = 64_10. Hasil cocok.
Saat mengurangi, jika digit di atas lebih kecil dari digit di bawah, kita "meminjam" (borrow) 1 dari kolom di sebelah kiri. 1 yang dipinjam dalam oktal bernilai 8. Jadi, kita tambahkan 8 ke digit yang meminjam.
40_8 - 13_83 dari 0. Karena 0 < 3, pinjam 1 dari kolom kiri.
4 menjadi 3.0 menjadi 0 + 8 = 8.8 - 3 = 5.3 - 1 = 2.Hasilnya: 25_8.
Verifikasi: 40_8 = 32_10, 13_8 = 11_10. 32 - 11 = 21_10.
25_8 = (2 * 8) + 5 = 16 + 5 = 21_10. Hasil cocok.
100_8 - 1_81 dari 0. Pinjam.
0 di sebelahnya juga 0, jadi pinjam dari 1 di kolom ketiga.1 menjadi 0.0 kedua menjadi 0 + 8 = 8. Pinjam 1 dari sini (menjadi 7), dan berikan 8 ke digit pertama.0 pertama menjadi 0 + 8 = 8.8 - 1 = 7.7 (karena dipinjam tadi). Tidak ada yang dikurangi. Jadi 7.0 (karena dipinjam). Tidak ada yang dikurangi. Jadi 0.Hasilnya: 77_8.
Verifikasi: 100_8 = 64_10, 1_8 = 1_10. 64 - 1 = 63_10.
77_8 = (7 * 8) + 7 = 56 + 7 = 63_10. Hasil cocok.
Perkalian oktal juga mirip dengan desimal. Setiap hasil perkalian parsial dijumlahkan, dengan memperhatikan carry ketika total mencapai atau melebihi 8.
25_8 * 3_85_8 * 3_8 = 15_10.
15_10 ke oktal: 15 / 8 = 1 sisa 7.15_10 = 17_8.7, carry 1.2_8 * 3_8 = 6_10. Tambahkan carry 1: 6 + 1 = 7_10.
7_10 ke oktal: 7_8.7.Hasilnya: 77_8.
Verifikasi: 25_8 = 21_10, 3_8 = 3_10. 21 * 3 = 63_10.
77_8 = (7 * 8) + 7 = 56 + 7 = 63_10. Hasil cocok.
12_8 * 14_812_8 * 4_8):
2_8 * 4_8 = 8_10. Konversi ke oktal: 10_8. Tulis 0, carry 1.1_8 * 4_8 = 4_10. Tambahkan carry 1: 4 + 1 = 5_10. Konversi ke oktal: 5_8.50_8.12_8 * 1_8, digeser satu posisi):
2_8 * 1_8 = 2_10. Konversi ke oktal: 2_8. Tulis 2.1_8 * 1_8 = 1_10. Konversi ke oktal: 1_8. Tulis 1.12_8. 50
+ 120 (perhatikan pergeseran)
-----
170
0 + 0 = 0.5 + 2 = 7.0 + 1 = 1.Hasilnya: 170_8.
Verifikasi: 12_8 = 10_10, 14_8 = 12_10. 10 * 12 = 120_10.
170_8 = (1*8^2) + (7*8^1) + (0*8^0) = 64 + 56 + 0 = 120_10. Hasil cocok.
Pembagian oktal adalah proses yang paling kompleks dan seringkali dihindari dengan mengkonversi angka ke desimal, melakukan pembagian, lalu mengkonversi hasilnya kembali ke oktal. Namun, prinsipnya sama dengan pembagian panjang desimal, hanya saja melibatkan tabel perkalian oktal dan pengurangan oktal.
170_8 / 12_8Kita tahu dari contoh perkalian sebelumnya bahwa hasilnya harus 14_8.
Bagian ini akan sangat mirip dengan pembagian panjang tradisional, tetapi semua angka dan operasi adalah dalam basis 8.
12_8 masuk ke 1_8? 0 kali.12_8 masuk ke 17_8? Kita perlu mencari angka X sedemikian rupa sehingga 12_8 * X_8 kurang dari atau sama dengan 17_8.
12_8 * 1_8 = 12_812_8 * 2_8 = (1*8+2)*2 = 10*2 = 20_10 = 24_8 (ini sudah lebih dari 17_8)X = 1_8. Tulis 1 di atas 7.
1_8 * 12_8 = 12_8.17_8 - 12_8:
7 - 2 = 51 - 1 = 05_8.0). Sekarang kita punya 50_8.12_8 masuk ke 50_8? Cari Y sehingga 12_8 * Y_8 <= 50_8.
12_8 * 1_8 = 12_812_8 * 2_8 = 24_812_8 * 3_8 = (10_10 * 3_10) = 30_10 = 36_812_8 * 4_8 = (10_10 * 4_10) = 40_10 = 50_8Y = 4_8. Tulis 4 di atas 0.
4_8 * 12_8 = 50_8.50_8 - 50_8 = 0_8.Hasilnya: 14_8.
Pembagian oktal, terutama untuk bilangan yang lebih besar, bisa menjadi sangat rumit secara manual. Dalam praktik, seringkali lebih mudah untuk mengkonversi ke desimal, melakukan operasi, dan mengkonversi kembali.
Meskipun oktal tidak lagi menjadi sistem bilangan yang digunakan secara luas untuk representasi umum dalam komputasi modern seperti heksadesimal, ia masih mempertahankan relevansinya dalam beberapa aplikasi khusus.
chmod)Ini adalah salah satu aplikasi oktal yang paling dikenal dan paling sering ditemui dalam praktik. Sistem operasi berbasis Unix, termasuk Linux dan macOS, menggunakan notasi oktal untuk menentukan izin akses pada file dan direktori.
Setiap file dan direktori memiliki tiga jenis izin dasar:
Tiga jenis izin ini diterapkan pada tiga kategori pengguna:
Setiap izin (r, w, x) memiliki nilai biner dan oktal yang sesuai:
r (read) = 100_2 = 4_8w (write) = 010_2 = 2_8x (execute) = 001_2 = 1_8- (no permission) = 000_2 = 0_8Untuk setiap kategori pengguna (Owner, Group, Others), nilai izinnya dijumlahkan. Kemudian, tiga digit oktal ini digabungkan untuk membentuk kode izin 3-digit.
755:rwx = 4 (r) + 2 (w) + 1 (x) = 7r-x = 4 (r) + 0 (-) + 1 (x) = 5r-x = 4 (r) + 0 (-) + 1 (x) = 5Jadi, chmod 755 filename memberikan pemilik izin penuh (baca, tulis, eksekusi), sedangkan grup dan pengguna lain hanya bisa membaca dan mengeksekusi.
644:rw- = 4 (r) + 2 (w) + 0 (-) = 6r-- = 4 (r) + 0 (-) + 0 (-) = 4r-- = 4 (r) + 0 (-) + 0 (-) = 4Jadi, chmod 644 filename berarti pemilik bisa membaca dan menulis, sedangkan grup dan pengguna lain hanya bisa membaca.
777:rwx = 7rwx = 7rwx = 7chmod 777 filename memberikan izin penuh (baca, tulis, eksekusi) kepada siapa saja. Ini seringkali dianggap sebagai praktik yang tidak aman karena membuka akses file terlalu luas.
Memahami bagaimana angka oktal ini terbentuk sangat penting bagi administrator sistem dan developer yang bekerja dengan sistem berbasis Unix. Ini memungkinkan mereka untuk mengelola keamanan file dengan presisi dan efisiensi.
Seperti yang dibahas dalam sejarah, oktal adalah representasi bilangan pilihan untuk banyak minicomputer dan mainframe di masa awal komputasi. Misalnya, seri PDP-8 dari Digital Equipment Corporation, minicomputer 12-bit yang sangat populer, sering diprogram dan di-debug menggunakan oktal. Programmer akan melihat alamat memori, isi register, dan kode operasi dalam format oktal.
Meskipun arsitektur modern cenderung menggunakan kelipatan 8 bit (byte) dan oleh karena itu heksadesimal lebih cocok, ada masih banyak sistem tertanam (embedded systems) atau perangkat keras khusus yang mungkin menggunakan arsitektur yang lebih tua atau yang dirancang untuk efisiensi bit di mana oktal masih bisa relevan. Ketika berinteraksi dengan perangkat keras ini atau membaca dokumentasi teknis dari era tersebut, pemahaman tentang oktal sangat diperlukan.
Banyak bahasa pemrograman modern masih menyediakan dukungan untuk literal oktal, yang memungkinkan programmer untuk secara eksplisit menulis angka dalam basis 8. Ini sangat berguna ketika berinteraksi dengan API atau sistem yang secara intrinsik menggunakan nilai-nilai oktal, seperti fungsi untuk mengatur izin file di sistem Unix.
0 (nol) diinterpretasikan sebagai oktal. Contoh: int x = 0755;. Namun, penggunaan 0 sebagai awalan oktal ini dapat membingungkan jika tidak hati-hati, karena angka desimal biasa tidak diawali dengan 0 kecuali 0 itu sendiri.0o (nol dan huruf 'o') untuk menunjukkan literal oktal. Contoh: permission = 0o755. Awalan ini lebih jelas dan tidak ambigu dibandingkan dengan awalan 0 yang digunakan C.0 adalah literal oktal. Contoh: int perm = 0755;.0o untuk literal oktal. Contoh: let octalValue = 0o123;.// Contoh penggunaan literal oktal di Python
# Izin file untuk read/write/execute oleh pemilik,
# read/execute oleh grup, dan read/execute oleh lainnya.
file_permission = 0o755
print(f"Izin file oktal: {file_permission}") # Output: 493 (nilai desimalnya)
# Contoh penggunaan literal oktal di C
/*
int main() {
int permission = 0755; // 0755 adalah oktal
printf("Izin file oktal: %o\n", permission); // Cetak sebagai oktal
printf("Izin file desimal: %d\n", permission); // Cetak sebagai desimal
return 0;
}
*/
// Output (jika dicetak sebagai oktal): 755
// Output (jika dicetak sebagai desimal): 493
Dukungan ini menunjukkan bahwa meskipun oktal tidak sepopuler desimal atau heksadesimal, ia masih merupakan bagian dari perangkat alat programmer untuk menangani skenario di mana basis 8 adalah representasi yang paling alami atau diwajibkan.
Pada masa awal komputasi, ketika biner terlalu panjang dan heksadesimal belum universal, memory dump (cetakan isi memori) sering kali diformat dalam oktal. Debugger dan monitor juga akan menampilkan register CPU dan lokasi memori dalam oktal. Ini memungkinkan para insinyur dan programmer untuk dengan cepat menafsirkan status mesin dengan cara yang lebih ringkas daripada biner murni.
Meskipun saat ini heksadesimal lebih umum untuk tujuan ini, memahami format oktal dari dokumentasi atau sistem warisan tetap menjadi keterampilan yang berharga bagi mereka yang bekerja di bidang pemulihan data atau emulasi perangkat keras lama.
Secara keseluruhan, oktal adalah sistem bilangan dengan sejarah yang kaya dan aplikasi yang spesifik, yang terus memberikan kontribusi pada beberapa aspek komputasi, terutama dalam manajemen sistem operasi dan interaksi dengan sistem lawas.
Setiap sistem bilangan memiliki keunggulan dan keterbatasannya sendiri. Memahami hal ini akan memberikan perspektif yang lebih lengkap tentang kapan dan mengapa oktal digunakan.
Ini adalah keunggulan utama oktal. Satu digit oktal dapat mewakili tiga bit biner (23 = 8). Ini secara signifikan mengurangi panjang deretan angka biner, membuatnya lebih mudah dibaca, ditulis, dan diucapkan oleh manusia. Misalnya, 101110010_2 menjadi 572_8. Pengurangan jumlah digit ini mengurangi kemungkinan kesalahan manusia saat mentranskripsi atau menafsirkan data biner.
Proses konversi antara oktal dan biner sangat sederhana dan intuitif. Cukup kelompokkan atau pisahkan bit biner menjadi tiga-tiga. Tidak diperlukan perhitungan matematika yang kompleks, menjadikannya cepat dan efisien.
Pada era awal komputer, banyak arsitektur memiliki lebar kata (word length) yang merupakan kelipatan dari tiga bit (misalnya, 6, 12, 18, 24, 36 bit). Untuk arsitektur semacam ini, oktal adalah representasi alami dan paling efisien untuk alamat, instruksi, dan data.
Penggunaan oktal untuk izin file di sistem operasi Unix/Linux adalah contoh sempurna bagaimana sistem bilangan ini tetap relevan. Representasi rwx yang koheren ke nilai oktal tunggal sangat efisien dan mudah dipahami bagi administrator sistem.
Tidak seperti heksadesimal yang menggunakan huruf A-F, oktal hanya menggunakan digit angka (0-7). Ini dapat mengurangi sedikit ambiguitas atau kebutuhan untuk mengingat nilai huruf yang setara dengan angka (meskipun ini adalah masalah kecil).
Keterbatasan terbesar oktal di era modern adalah bahwa arsitektur komputer saat ini hampir secara universal menggunakan "byte" sebagai unit dasar data, yang terdiri dari 8 bit. Heksadesimal (basis 16) jauh lebih cocok untuk ini karena satu byte (8 bit) dapat direpresentasikan dengan tepat dua digit heksadesimal (setiap digit heksa mewakili 4 bit). Sebaliknya, satu byte tidak dapat direpresentasikan secara ringkas oleh jumlah bulat digit oktal (8 bit membutuhkan 2 dan 2/3 digit oktal).
Contoh: 1 byte (8 bit) = 11111111_2.
FF_16 (2 digit).377_8 (3 digit). Ini tidak seefisien heksadesimal untuk unit 8-bit.Di luar izin file Unix dan beberapa sistem lawas, penggunaan oktal dalam pemrograman atau representasi data sehari-hari telah sangat berkurang. Sebagian besar programmer modern lebih akrab dengan desimal, biner, dan heksadesimal.
Seperti sistem non-desimal lainnya, oktal tidak sealami desimal bagi sebagian besar manusia yang terbiasa menghitung dengan basis 10. Ini membutuhkan sedikit pembelajaran dan latihan untuk terbiasa.
Singkatnya, oktal adalah sistem bilangan yang sangat baik untuk merepresentasikan informasi biner yang dikelompokkan dalam kelipatan tiga bit. Keunggulannya terutama terletak pada keringkasan dan kemudahan konversi ke/dari biner, yang menjadikannya pilihan yang kuat di era komputasi tertentu dan dalam aplikasi spesifik seperti izin file Unix. Namun, dengan dominasi arsitektur berbasis byte, heksadesimal telah menggantikan oktal sebagai sistem pilihan untuk representasi data biner secara umum.
Sistem bilangan oktal, dengan basis 8 dan digit 0-7, adalah komponen penting dalam sejarah dan pemahaman ilmu komputasi. Meskipun mungkin tidak sepopuler desimal atau heksadesimal di era komputasi modern yang didominasi oleh byte (8-bit), oktal pernah menjadi alat yang tak ternilai harganya bagi para programmer dan insinyur komputer. Kemampuannya untuk merepresentasikan kelompok tiga bit biner secara ringkas dan mudah dibaca adalah kekuatan utamanya, yang memecahkan tantangan keterbacaan deretan biner yang panjang.
Sejarah menunjukkan bahwa oktal berkembang pesat seiring dengan arsitektur komputer yang menggunakan lebar kata kelipatan tiga bit, seperti DEC PDP-8. Konversi antara oktal dan biner adalah salah satu yang paling langsung di antara sistem bilangan, cukup dengan mengelompokkan atau memisahkan bit biner menjadi tiga-tiga. Metode konversi lainnya, seperti oktal ke desimal melalui penjumlahan pangkat basis 8, dan desimal ke oktal melalui pembagian berulang, juga fundamental untuk memahami cara kerja sistem bilangan ini.
Meskipun peran oktal telah menyusut dengan munculnya arsitektur berbasis byte dan heksadesimal yang lebih sesuai, oktal tetap memiliki pijakan yang kuat dalam aplikasi praktis, terutama dalam manajemen izin file di sistem operasi berbasis Unix/Linux. Pemahaman tentang notasi oktal dalam perintah chmod adalah keterampilan dasar bagi setiap administrator sistem dan pengembang perangkat lunak yang bekerja di lingkungan ini. Selain itu, banyak bahasa pemrograman terus mendukung literal oktal, menggarisbawahi relevansinya dalam skenario tertentu.
Dengan mempelajari oktal, kita tidak hanya mendapatkan alat untuk memahami dan bekerja dengan beberapa aspek teknologi yang ada, tetapi juga memperdalam pemahaman kita tentang prinsip-prinsip dasar sistem bilangan posisional. Pengetahuan ini adalah fondasi yang kokoh untuk menjelajahi lebih jauh dunia matematika diskrit dan arsitektur komputer. Oktal mungkin bukan pusat perhatian lagi, tetapi warisannya dan kegunaannya yang spesifik memastikan bahwa ia akan tetap menjadi bagian integral dari lanskap komputasi.