17Aug
Menghitung dari nol adalah praktik yang sangat umum dalam banyak bahasa komputer, tapi mengapa? Baca terus saat kita mengeksplorasi fenomena dan mengapa begitu meluas.
Pertanyaan Hari Ini &Sesi jawaban datang kepada kami atas izin SuperUser - subdivisi dari Stack Exchange, pengelompokan berbasis komunitas dari Q & A situs web.
Pertanyaan
Pembaca superuser DragonLord ingin tahu mengapa sebagian besar 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 dimulai dari indeks nol.
Alasan historis apa yang ada untuk ini, dan keuntungan praktis apa yang dihitung dari nol memiliki lebih dari sekedar menghitung dari satu?
Mengapa memang? Seiring praktiknya, pastinya ada alasan praktis untuk implementasinya.
Jawaban
SuperUser kontributor Matteo menawarkan wawasan berikut:
Menghitung array dari 0 menyederhanakan perhitungan alamat memori dari setiap elemen.
Jika sebuah array disimpan pada posisi tertentu di memori( ini disebut alamat) posisi setiap elemen dapat dihitung sebagai elemen
( n) = alamat + n * size_of_the_elementJika Anda menganggap elemen pertama yang pertama, perhitunganmenjadi elemen
( n) = alamat +( n-1) * size_of_the_elementBukan perbedaan besar namun menambahkan pengurangan yang tidak perlu untuk setiap akses.
Diedit untuk menambahkan:
- Penggunaan indeks array sebagai offset bukan keharusan tapi hanya kebiasaan. Pengimbangan elemen pertama dapat disembunyikan oleh sistem dan dipertimbangkan saat mengalokasikan dan elemen referensi.
- Dijkstra menerbitkan sebuah makalah "Mengapa penomoran harus dimulai pada 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 mempelajari lebih dalam jawabannya, kertas Dijkstra adalah bacaan informatif.
Punya sesuatu untuk ditambahkan ke penjelasan? Terdengar dalam komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange tech-savvy lainnya? Simak thread diskusi selengkapnya disini.