Laman » bagaimana untuk » Mengapa Mengira Komputer Daripada Zero?

    Mengapa Mengira Komputer Daripada Zero?


    Mengira dari sifar adalah amalan yang sangat biasa dalam banyak bahasa komputer, tetapi mengapa? Baca terus ketika kita meneroka fenomena dan mengapa ia begitu meluas.

    Sesi Soalan & Jawapan hari ini datang kepada kami dengan ihsan SuperUser-bahagian pembahagian Stack Exchange, kumpulan yang diketuai oleh komuniti laman web Q & A.

    Soalan

    Pembaca SuperUser DragonLord ingin tahu mengapa kebanyakan sistem operasi dan bahasa pengaturcaraan dikira dari sifar. Dia menulis:

    Komputer secara tradisinya menghitung nilai berangka bermula dari sifar. Sebagai contoh, susunan dalam bahasa pengaturcaraan berasaskan C bermula dari indeks sifar.

    Apa sebab-sebab sejarah ada untuk ini, dan apa kelebihan praktikal yang menghitung dari sifar mempunyai lebih daripada satu?

    Kenapa memang? Sebagaimana berlakunya amalan, pastinya ada sebab praktikal untuk pelaksanaannya.

    Jawapan

    Penyumbang SuperUser Matteo menawarkan pandangan berikut:

    Mengira susunan daripada 0 menyederhanakan pengiraan alamat memori bagi setiap elemen.

    Sekiranya array disimpan pada kedudukan yang diberikan dalam memori (ia dipanggil alamat) kedudukan setiap elemen dapat dikira sebagai

    elemen (n) = alamat + n * size_of_the_element 

    Jika anda menganggap elemen pertama yang pertama, pengiraan menjadi

    elemen (n) = alamat + (n-1) * size_of_the_element 

    Bukan perbezaan besar tetapi ia menambah pengurangan yang tidak perlu untuk setiap akses.

    Diedit untuk menambah:

    • Penggunaan indeks array sebagai offset bukan satu keperluan tetapi hanya satu kebiasaan. Offset elemen pertama dapat disembunyikan oleh sistem dan dipertimbangkan ketika mengalokasikan dan merujuk elemen.
    • Dijkstra menerbitkan sebuah kertas "Mengapa nombor harus bermula pada sifar" (pdf) di mana dia menerangkan mengapa bermula dengan 0 adalah pilihan yang lebih baik. Bermula pada sifar membolehkan perwakilan julat yang lebih baik.

    Sekiranya anda ingin menyelidiki lebih mendalam jawapan, kertas Dijkstra adalah bacaan bermaklumat.


    Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.