Menghitung dari nol adalah praktik yang sangat umum di banyak bahasa komputer, tetapi mengapa? Baca terus ketika kami menjelajahi fenomena tersebut dan mengapa fenomena ini begitu meluas.
Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.
Pembaca SuperUser DragonLord penasaran mengapa kebanyakan sistem operasi dan bahasa pemrograman dihitung dari nol. Dia menulis:
Komputer secara tradisional menghitung nilai numerik mulai dari nol. Sebagai contoh, array dalam bahasa pemrograman berbasis-C mulai dari indeks nol.
Alasan historis apa yang ada untuk ini, dan keunggulan praktis apa yang dihitung dari nol memiliki penghitungan lebih dari satu?
Kenapa memang begitu? Seperti luasnya praktik, pasti ada alasan praktis untuk pelaksanaannya.
Kontributor SuperUser, Matteo, menawarkan wawasan berikut:
Menghitung larik dari 0 menyederhanakan perhitungan alamat memori setiap elemen.
Jika array disimpan pada posisi tertentu dalam memori (itu disebut alamat) posisi masing-masing elemen dapat dihitung sebagai
elemen (n) = alamat + n * size_of_the_element
Jika Anda mempertimbangkan elemen pertama yang pertama, perhitungan menjadi
elemen (n) = alamat + (n-1) * size_of_the_element
Bukan perbedaan besar tetapi menambahkan pengurangan yang tidak perlu untuk setiap akses.
Diedit untuk menambahkan:
- Penggunaan indeks array sebagai offset bukan merupakan persyaratan tetapi hanya sebuah kebiasaan. Pengimbangan elemen pertama dapat disembunyikan oleh sistem dan dipertimbangkan ketika mengalokasikan dan mereferensikan elemen.
- Dijkstra menerbitkan sebuah makalah “Mengapa penomoran harus dimulai dari nol” (pdf) di mana dia menjelaskan mengapa memulai dengan 0 adalah pilihan yang lebih baik. Mulai dari nol memungkinkan representasi rentang yang lebih baik.
Jika Anda ingin menggali lebih dalam jawaban, makalah Dijkstra adalah bacaan yang informatif.
Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.