FlowingDev

Basis Bilangan Dijelaskan: Kenapa Cara Berhitung Komputer Itu Aneh

Pelajari cara kerja sistem basis bilangan seperti biner, oktal, desimal, dan heksadesimal untuk merepresentasikan angka yang sama dengan cara berbeda, sebuah konsep kunci dalam komputasi.

Coba tool-nya: Base Converter

Dalam satu kalimat

Konversi basis bilangan adalah seni menerjemahkan angka dari satu sistem hitung (seperti desimal 10 digit yang kita kenal) ke sistem lain (seperti biner 2 digit bawaan komputer), tanpa mengubah nilainya.

Masalah yang diselesaikan

Manusia, pada umumnya, punya sepuluh jari. Perangkat keras biologis ini membuat berhitung dalam kelompok sepuluh—sistem desimal atau basis-10—terasa sangat alami. Kita punya sepuluh simbol unik (0 sampai 9), dan begitu kita mentok di sembilan, kita "putar balik": kita tambahkan digit baru di sebelah kiri dan mulai lagi dari nol. Sepuluh adalah 10, seratus adalah 100, dan seterusnya. Gampang, kan.

Komputer, di sisi lain, punya "jari" yang berbeda. Perangkat keras fundamentalnya adalah transistor, sebuah saklar mikroskopis yang bisa dalam keadaan on (nyala) atau off (mati). Cuma itu. Dua keadaan. Hal ini membuat sistem dua simbol—biner atau basis-2—menjadi bahasa asli komputer. Kedua simbol itu adalah 0 (off) dan 1 (on).

Ini menciptakan masalah penerjemahan. Bagi komputer, angka manusia 237 itu tidak ada artinya. Angka itu perlu direpresentasikan sebagai serangkaian kondisi on dan off. Angka yang sama, 237, dalam biner adalah 11101101.

Meskipun komputer fasih berbahasa biner, manusia... tidak. Membaca deretan panjang angka satu dan nol adalah resep jitu bikin pusing dan mata jereng. Untuk menjembatani kesenjangan ini, para developer menciptakan singkatan yang lebih nyaman: oktal (basis-8) dan heksadesimal (basis-16). Basis-basis "pangkat dua" ini sangat mudah dikonversi ke dan dari biner, tapi mereka memadatkan string biner yang panjang menjadi potongan yang jauh lebih mudah dibaca.

Basis bilangan ada untuk menyelesaikan ketidakcocokan mendasar antara cara manusia berpikir tentang angka dan cara mesin menyimpannya secara fisik. Mereka adalah batu Rosetta yang memungkinkan kita mengintip isi pikiran mesin tanpa tersesat di lautan angka satu dan nol.

Dapur pacunya

Keajaiban di balik setiap basis bilangan adalah konsep yang disebut notasi posisional. Posisi sebuah digit menentukan nilainya. Mari kita bedah.

Jadi, apa itu "basis"?

Bayangkan odometer mobilmu. Ketika digit paling kanan berubah dari 9 ke 0, digit di sebelah kirinya naik satu angka. Setiap "tempat" digit mewakili pangkat dari sepuluh.

Angka 427 dalam sistem basis-10 kita sehari-hari sebenarnya berarti:

  • 4 ratusan (4 × 10²)
  • 2 puluhan (2 × 10¹)
  • 7 satuan (7 × 10⁰)

Jumlahkan semuanya: 400 + 20 + 7 = 427.

"Basis" hanyalah angka yang kita pangkatkan untuk setiap posisi. Untuk basis-10, basisnya adalah 10. Untuk biner (basis-2), basisnya 2. Untuk heksadesimal (basis-16), basisnya 16. Rumusnya sama, hanya basisnya (b) yang berubah:

... + (digit × b²) + (digit × b¹) + (digit × b⁰)

Dari dunia kita (Desimal) ke dunia mereka (Basis Apapun)

Mari kita ubah angka desimal 427 ke biner (basis-2). Algoritmanya adalah "terus-menerus bagi dengan basis tujuan dan catat sisanya."

Pembagian Hasil Sisa
427 ÷ 2 213 1
213 ÷ 2 106 1
106 ÷ 2 53 0
53 ÷ 2 26 1
26 ÷ 2 13 0
13 ÷ 2 6 1
6 ÷ 2 3 0
3 ÷ 2 1 1
1 ÷ 2 0 1

Sekarang, baca sisa pembagian dari bawah ke atas.

Jadi, desimal 427 adalah biner 110101011.

Metode ini berlaku untuk basis apa pun. Untuk mengubah 427 ke heksadesimal (basis-16), kamu tinggal bagi dengan 16. (Catatan: Di basis-16, kita butuh lebih dari 10 simbol, jadi kita pakai A untuk 10, B untuk 11, ..., sampai F untuk 15).

  • 427 ÷ 16 = 26 dengan sisa 11 (yaitu B dalam hex).
  • 26 ÷ 16 = 1 dengan sisa 10 (yaitu A dalam hex).
  • 1 ÷ 16 = 0 dengan sisa 1.

Membaca dari bawah ke atas memberi kita 1AB. Jadi, desimal 427 adalah 1AB dalam hex.

Dari dunia mereka (Basis Apapun) kembali ke dunia kita (Desimal)

Untuk melakukan sebaliknya, kita gunakan rumus notasi posisional yang kita lihat tadi. Mari ubah biner 110101011 kembali ke desimal. Kita kalikan setiap digit dengan 2 pangkat posisinya (mulai dari 0 di sebelah kanan).

  1 * 2^8 = 256
+ 1 * 2^7 = 128
+ 0 * 2^6 = 0
+ 1 * 2^5 = 32
+ 0 * 2^4 = 0
+ 1 * 2^3 = 8
+ 0 * 2^2 = 0
+ 1 * 2^1 = 2
+ 1 * 2^0 = 1
----------------
Jumlah    = 427

Berhasil! Mari kita coba dengan hex 1AB:

  1 * 16^2 = 256
+ A * 16^1 = (10 * 16) = 160
+ B * 16^0 = (11 * 1)  = 11
-------------------------
Jumlah     = 427

Sip. Angkanya sama, cuma beda kostum.

Jalan Pintas Hex dan Oktal

Jadi, buat apa repot-repot pakai hex dan oktal? Karena mereka adalah basis "pangkat dua".

  • Oktal adalah basis-8, dan 8 = 2³. Artinya, setiap satu digit oktal memetakan secara sempurna ke sekelompok tiga digit biner.
  • Hex adalah basis-16, dan 16 = 2⁴. Artinya, setiap satu digit hex memetakan secara sempurna ke sekelompok empat digit biner (disebut "nibble").

Mari kita ambil angka biner yang besar: 1101011101001111 Untuk membacanya, manusia harus memindai setiap digit. Tapi untuk mengubahnya ke hex, kamu tinggal memecahnya menjadi kelompok-kelompok empat digit dari kanan:

1101 | 0111 | 0100 | 1111

Sekarang, ubah setiap kelompok:

  • 1101 adalah 8+4+0+1 = 13, yaitu D
  • 0111 adalah 0+4+2+1 = 7
  • 0100 adalah 0+4+0+0 = 4
  • 1111 adalah 8+4+2+1 = 15, yaitu F

Jadi, 1101011101001111 hanyalah D74F dalam hex. Jauh lebih mudah dibaca dan nggak gampang salah. Ini bukan sekadar perhitungan; ini adalah transkripsi langsung. Inilah mengapa developer suka heksadesimal: ini adalah "pembungkus" data biner yang paling sempurna untuk dibaca manusia.

Cerita dari dunia nyata

Kasus Warna Misterius

Seorang developer front-end junior menerima mockup desain dari seorang desainer UI. Warna utama brand tercantum sebagai #E63946. Si developer tahu ini adalah salah satu nuansa merah, tapi seberapa merah? Dan bagaimana dengan warna lainnya? Dia memasukkan kode hex itu ke konverter. E63946 sebenarnya adalah tiga angka hex terpisah: E6 untuk Merah, 39 untuk Hijau, dan 46 untuk Biru.

  • E6 dalam hex dikonversi menjadi 230 dalam desimal. Oke, jadi merahnya banyak banget (dari maksimal 255).
  • 39 dalam hex dikonversi menjadi 57 dalam desimal. Sedikit hijau.
  • 46 dalam hex dikonversi menjadi 70 dalam desimal. Sedikit biru.

Dengan memecah kode hex, developer tersebut memahami komposisi warna. Ini bukan sekadar "merah", tapi "sebagian besar merah, dengan sedikit hijau dan biru dalam jumlah yang mirip untuk membuatnya tidak terlalu mencolok."

Pelajaran: Heksadesimal adalah bahasa warna di web. Memahaminya membantumu lebih dari sekadar copy-paste kode dan benar-benar mengerti warna yang kamu gunakan.

Teka-teki Izin Akses File

Seorang sysadmin mencoba mengamankan skrip yang baru diunggah, deploy.sh, di server Linux. Dia ingin pemilik bisa membaca, menulis, dan mengeksekusinya, tetapi grup dan orang lain hanya bisa membaca dan mengeksekusinya. Dia sering melihat perintah chmod 755 deploy.sh digunakan di mana-mana, tapi selama ini dia hanya menganggapnya sebagai mantra ajaib.

Kali ini, dia mencarinya. Angka 755 adalah oktal. Ini mewakili tiga set izin: Owner (Pemilik), Group (Grup), dan Others (Lainnya).

  • Izin Owner adalah 7. Dalam biner, 7 adalah 111.
  • Izin Group adalah 5. Dalam biner, 5 adalah 101.
  • Izin "Others" adalah 5. Dalam biner, 5 adalah 101.

Setiap digit biner sesuai dengan izin tertentu: read (r), write (w), dan execute (x).

  • 111 berarti rwx (Read, Write, Execute semuanya ON).
  • 101 berarti r-x (Read dan Execute ON, Write OFF).

Jadi, chmod 755 mengatur izin menjadi rwxr-xr-x, persis seperti yang dibutuhkan. Misteri terpecahkan.

Pelajaran: Oktal menyediakan singkatan super ringkas untuk mengelola izin file, yang pada dasarnya adalah sekumpulan flag on/off (bit).

Bug Gara-gara Bit yang Tertukar

Seorang developer yang membangun sistem embedded untuk termostat pintar perlu menyimpan pengaturan perangkat ke sepotong kecil memori. Untuk menghemat ruang, mereka menggunakan satu byte (8 bit) sebagai "flag register". Setiap bit mewakili sebuah pengaturan: isHeating, isCooling, fanOn, hasWifiConnection, dll.

Suatu hari, laporan bug membanjir: "Setiap kali saya menyalakan kipas, pemanas juga ikut menyala!" Si developer bingung. Kode untuk menyalakan kipas terlihat benar. Tapi ketika dia memeriksa byte pengaturan di memori, dia melihat masalahnya. Katakanlah kipas adalah bit ke-2 (nilai 2¹ = 2) dan pemanas adalah bit ke-3 (nilai 2² = 4). Kode seharusnya mengatur byte menjadi ...010 (kipas nyala). Sebaliknya, kode itu malah mengaturnya menjadi ...110 (kipas nyala DAN pemanas nyala). Nilai desimalnya menjadi 6 bukannya 2, yang tidak langsung terlihat jelas. Tapi melihat representasi binernya 00000110 membuat masalahnya sangat jelas: ada dua bit yang dinyalakan bukannya satu. Operasi bitwise yang salah adalah biang keladinya.

Pelajaran: Untuk pemrograman tingkat rendah, debugging memori, atau bekerja dengan register perangkat keras, berpikir dalam biner bukanlah pilihan—itu satu-satunya cara untuk melihat apa yang sebenarnya terjadi.

Kesalahan dan jebakan umum

  • Lupa dengan prefiks. Di banyak bahasa pemrograman (seperti C, Java, atau JavaScript), angka yang dimulai dengan 0 diartikan sebagai oktal. 010 bukan sepuluh, tapi delapan! Angka yang dimulai dengan 0x adalah heksadesimal. 0x10 adalah enam belas. Tidak mengetahui ini bisa menyebabkan bug yang sangat aneh.
  • Tertukar antara O/0 dan I/1. Ketika kamu menatap string hex atau biner yang panjang, matamu bisa jadi kabur dan salah mengira huruf O sebagai nol, atau I sebagai satu. Hex tidak menggunakan O atau I, tapi konversi basis lain mungkin saja, dan ini adalah kesalahan "salah pencet" yang klasik.
  • Menganggap ada standar untuk basis > 16. Karakter untuk biner (0-1), oktal (0-7), desimal (0-9), dan hex (0-9, A-F) sudah terstandarisasi. Tapi bagaimana dengan basis-22 atau basis-36? Sebagian besar sistem menggunakan 0-9 diikuti oleh A-Z, tapi itu bukan hukum universal. Selalu verifikasi set karakter (atau "alfabet") yang digunakan saat berurusan dengan basis yang kurang umum.
  • Mengabaikan batas integer. Angka hex 64-bit seperti 0x7FFFFFFFFFFFFFFF mewakili angka yang sangat besar. Jika kamu mencoba mengubahnya dan menyimpannya dalam variabel integer 32-bit standar di programmu, itu tidak akan muat. Ini akan menyebabkan "integer overflow," di mana angkanya berputar kembali menjadi nilai negatif atau menimbulkan error.

Kenapa Ini Penting Buat Kamu

Bahkan jika kamu bukan programmer C tingkat rendah, kamu bakal sering ketemu dengan basis bilangan yang berbeda. Kamu harus memikirkannya setiap kali kamu:

  • Memilih warna di CSS atau dari alat desain (#RRGGBB).
  • Berurusan dengan nilai hash seperti API key atau SHA commit Git, yang hampir selalu dalam format hex.
  • Mengatur izin di server web (chmod).
  • Bekerja dengan format data tingkat rendah, protokol jaringan, atau apa pun yang menggunakan bitmask (misalnya, feature flag).
  • Menemukan kode error atau alamat memori di debugger.
  • Mencoba memahami cara kerja komputer yang sebenarnya. Ini adalah konsep dasar yang membongkar banyak "sihir" di dunia digital.

Pelajari Lebih Lanjut

  • Notasi Posisional (Wikipedia): Penjelasan akademis yang mendalam tentang teori di balik semua sistem basis bilangan.
  • Heksadesimal (Wikipedia): Tinjauan bagus tentang basis-16, sejarahnya, dan penggunaannya yang umum dalam komputasi.
  • **MDN Web Docs: <color>: Panduan definitif bagi web developer tentang nilai warna CSS, termasuk penjelasan menyeluruh tentang notasi hex (#RRGGBB).
  • Halaman manual chmod: Manual kanonis Linux untuk perintah chmod, yang merinci penggunaan oktal untuk mengatur izin file.
  • Operasi bitwise di JavaScript (MDN): Panduan praktis yang menunjukkan bagaimana manipulasi level bit dilakukan dalam bahasa tingkat tinggi, skenario umum untuk menerapkan pengetahuan basis-2.

Teori beres. Saatnya praktik — 100% di browser kamu.

Coba tool-nya: Base Converter