Kenapa ini penting
Semua yang ada di komputer, entah teks, foto, lagu, video, atau kode program, pada akhirnya disimpan sebagai deretan 0 dan 1. Kalau kamu paham ini, banyak hal jadi masuk akal: kenapa ukuran file ditulis dalam KB/MB/GB, kenapa ada batas angka terbesar yang bisa disimpan, dan kenapa beberapa operasi angka di JavaScript menghasilkan sesuatu yang "aneh". Modul ini juga jadi fondasi untuk modul representasi teks dan angka berikutnya.
Konsep inti
Kenapa komputer memakai 0 dan 1?
Di dalam chip komputer ada miliaran transistor, yaitu saklar listrik super kecil. Saklar hanya punya dua keadaan yang mudah dibedakan: mati (tidak ada tegangan) atau hidup (ada tegangan). Kita menamai dua keadaan itu 0 dan 1.
Kenapa tidak pakai 10 keadaan seperti angka desimal? Karena membedakan 10 tingkat tegangan secara akurat itu sulit dan rawan salah, apalagi kalau ada gangguan listrik sedikit saja. Membedakan dua keadaan (ada/tidak ada) jauh lebih stabil, murah, dan cepat. Analoginya seperti lampu kamar: kamu langsung tahu lampu itu nyala atau mati, tapi akan sulit membedakan 10 tingkat redup dengan mata telanjang.
Sistem bilangan yang hanya memakai dua angka (0 dan 1) disebut biner (binary).
Bit dan byte
- Bit (binary digit) adalah satuan informasi terkecil: satu angka 0 atau 1.
- Byte adalah kelompok 8 bit. Contoh:
01000001adalah satu byte.
Berapa banyak kombinasi yang bisa dibuat? Setiap bit menggandakan jumlah kemungkinan:
| Jumlah bit | Kombinasi | Contoh pemakaian |
|---|---|---|
| 1 | 2 | ya/tidak, on/off |
| 2 | 4 | 00, 01, 10, 11 |
| 4 | 16 | satu digit heksadesimal |
| 8 (1 byte) | 256 | satu karakter ASCII, satu kanal warna (0-255) |
| 16 | 65.536 | |
| 32 | sekitar 4,29 miliar | alamat IPv4 |
Rumusnya: n bit menghasilkan 2ⁿ kombinasi. Karena itu warna di web memakai angka 0 sampai 255 per kanal merah, hijau, biru: setiap kanal disimpan dalam 1 byte (256 nilai).
Satuan ukuran data
| Satuan | Besar (desimal, SI) | Besar (biner, IEC) |
|---|---|---|
| Kilobyte (KB) / Kibibyte (KiB) | 1.000 byte | 1.024 byte |
| Megabyte (MB) / Mebibyte (MiB) | 1.000.000 byte | 1.048.576 byte |
| Gigabyte (GB) / Gibibyte (GiB) | 1.000.000.000 byte | 1.073.741.824 byte |
Ada dua cara hitung. Produsen harddisk biasanya memakai hitungan 1.000, sedangkan sebagian sistem operasi memakai hitungan 1.024. Itulah sebabnya SSD "512 GB" terlihat sekitar 476 GB di Windows. Tidak ada yang dicuri, hanya beda satuan.
Hati-hati juga dengan bit vs byte pada internet. Kecepatan internet ditulis dalam Mbps (megabit per detik), sedangkan ukuran file dalam MB (megabyte). Internet 100 Mbps berarti maksimal sekitar 12,5 MB per detik (100 ÷ 8).
Semua data adalah angka
Komputer tidak tahu apa itu "huruf A" atau "warna merah". Ia hanya tahu angka biner. Maknanya ditentukan oleh kesepakatan (encoding):
- Teks: setiap karakter diberi nomor. Misalnya
A= 65 =01000001. - Gambar: setiap titik (pixel) disimpan sebagai angka merah, hijau, biru. Merah murni = (255, 0, 0).
- Suara: gelombang suara diukur ribuan kali per detik (sampling), setiap ukuran disimpan sebagai angka.
- Program: instruksi CPU juga berupa angka biner (machine code).
Byte yang sama, misalnya 01000001, bisa dibaca sebagai angka 65 atau huruf "A", tergantung program memperlakukannya sebagai apa. Inilah alasan file .jpg yang dibuka di Notepad terlihat seperti karakter acak: datanya dibaca dengan "kacamata" yang salah.
Membaca bilangan biner
Biner memakai nilai tempat seperti desimal, tapi kelipatannya 2, bukan 10. Dari kanan ke kiri, nilai tempatnya 1, 2, 4, 8, 16, 32, 64, 128.
Biner: 0 1 0 0 0 0 0 1
Nilai: 128 64 32 16 8 4 2 1
Hasil: 64 + 1 = 65
Detail konversi akan dibahas lagi di modul representasi angka.
Contoh kode
JavaScript bisa menunjukkan representasi biner sebuah angka dan mengukur ukuran data dalam byte.
// Mengubah angka desimal ke string biner
console.log((65).toString(2)); // → 1000001
console.log((255).toString(2)); // → 11111111
// Menulis angka langsung dalam biner dengan awalan 0b
console.log(0b01000001); // → 65
// padStart menambahkan nol di depan supaya pas 8 bit (1 byte)
console.log((5).toString(2).padStart(8, "0")); // → 00000101
// Berapa kombinasi dari n bit? Pakai operator pangkat **
for (const n of [1, 2, 4, 8, 16]) {
console.log(`${n} bit = ${2 ** n} kombinasi`);
}
// → 1 bit = 2 kombinasi
// → 2 bit = 4 kombinasi
// → 4 bit = 16 kombinasi
// → 8 bit = 256 kombinasi
// → 16 bit = 65536 kombinasi
Menghitung ukuran teks dalam byte dan mengonversi satuan:
// TextEncoder mengubah teks menjadi deretan byte (UTF-8)
const bytes = new TextEncoder().encode("Halo");
console.log(bytes); // → Uint8Array(4) [ 72, 97, 108, 111 ]
console.log(bytes.length); // → 4 (empat byte untuk empat huruf)
// Kecepatan internet: Mbps ke MB per detik
const mbps = 100;
console.log(mbps / 8, "MB per detik"); // → 12.5 MB per detik
// Kenapa SSD 512 GB terbaca sekitar 476 GiB?
const totalByte = 512 * 1000 ** 3;
console.log((totalByte / 1024 ** 3).toFixed(1), "GiB"); // → 476.8 GiB
Kesalahan umum
- Menyamakan bit dan byte. 1 byte = 8 bit. Mb (megabit) bukan MB (megabyte). Selalu perhatikan huruf "b" kecil atau "B" besar.
- Mengira 1 KB selalu 1.024 byte. Secara standar SI, 1 KB = 1.000 byte, dan 1 KiB = 1.024 byte. Keduanya sering tercampur di kehidupan nyata, jadi cek konteksnya.
- Membaca biner dari kiri dengan nilai 1. Nilai tempat terkecil (1) ada di paling kanan, bukan paling kiri.
- Menganggap data punya makna sendiri. Byte hanyalah angka. Maknanya (huruf, warna, suara) tergantung encoding yang dipakai untuk membacanya.
Latihan
- Mudah, Berapa bit dalam 3 byte? Berapa kombinasi berbeda yang bisa disimpan dalam 3 bit?
- Sedang, Ubah biner
00001010dan11001000ke desimal secara manual, lalu cek jawabanmu denganparseInt("...", 2)di JavaScript. - Menantang, Sebuah file video berukuran 750 MB. Berapa detik minimal waktu download dengan internet 50 Mbps? Tulis perhitungannya dalam JavaScript.
Lihat solusi
1. 3 byte × 8 = 24 bit. 3 bit menghasilkan 2³ = 8 kombinasi (000, 001, 010, 011, 100, 101, 110, 111).
2. 00001010 = 8 + 2 = 10. 11001000 = 128 + 64 + 8 = 200.
console.log(parseInt("00001010", 2)); // → 10
console.log(parseInt("11001000", 2)); // → 200
3. Ubah semua ke satuan yang sama (bit).
const ukuranMB = 750;
const kecepatanMbps = 50;
const ukuranMegabit = ukuranMB * 8; // 6000 megabit
const detik = ukuranMegabit / kecepatanMbps; // 120 detik
console.log(detik, "detik"); // → 120 detik
console.log(detik / 60, "menit"); // → 2 menit
Ini angka ideal. Kenyataannya biasanya lebih lama karena kecepatan internet jarang stabil di angka maksimal.
Ringkasan
- Komputer memakai biner (0 dan 1) karena transistor paling andal membedakan dua keadaan: mati dan hidup.
- 1 bit = satu angka 0/1, 1 byte = 8 bit = 256 kemungkinan nilai.
- n bit menghasilkan 2ⁿ kombinasi.
- KB/MB/GB bisa dihitung per 1.000 (SI) atau per 1.024 (KiB/MiB/GiB). Mbps itu bit, MB itu byte.
- Semua data (teks, gambar, suara, program) disimpan sebagai angka, dan maknanya ditentukan oleh encoding.