Główna » jak » Dlaczego komputery liczą od zera?

    Dlaczego komputery liczą od zera?


    Odliczanie od zera jest bardzo powszechną praktyką w wielu językach komputerowych, ale dlaczego? Czytaj dalej, kiedy badamy zjawisko i dlaczego jest ono tak powszechne.

    Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.

    Pytanie

    Czytnik SuperUser DragonLord jest ciekawy, dlaczego większość systemów operacyjnych i języków programowania liczy się od zera. On pisze:

    Komputery tradycyjnie sumują wartości liczbowe zaczynając od zera. Na przykład tablice w językach programowania bazujących na C zaczynają się od zera.

    Jakie są tego historyczne powody i jakie praktyczne zalety liczą od zera, już odliczają od jednego?

    Dlaczego tak naprawdę? Tak powszechna jak praktyka, z pewnością istnieją praktyczne powody jej wdrożenia.

    Odpowiedź

    Uczestnik SuperUser Matteo oferuje następujące informacje:

    Zliczanie tablic od 0 upraszcza obliczanie adresu pamięci każdego elementu.

    Jeśli tablica jest przechowywana w danej pozycji w pamięci (zwanej adresem), pozycja każdego elementu może być obliczona jako

    element (n) = adres + n * size_of_the_element 

    Jeśli uważasz, że pierwszy element jest pierwszy, obliczenia stają się

    element (n) = adres + (n-1) * size_of_the_element 

    Nie jest to duża różnica, ale dodaje niepotrzebne odejmowanie dla każdego dostępu.

    Edytowane w celu dodania:

    • Użycie indeksu tablicy jako offsetu nie jest wymogiem, a jedynie nawykiem. Przesunięcie pierwszego elementu może być ukryte przez system i uwzględnione podczas przydzielania elementu i odwoływania się do niego.
    • Dijkstra opublikował artykuł "Dlaczego numeracja powinna zaczynać się od zera" (pdf), gdzie wyjaśnia, dlaczego zaczynanie od 0 jest lepszym wyborem. Począwszy od zera pozwala na lepszą reprezentację zakresów.

    Jeśli chcesz głębiej zagłębić się w odpowiedź, papier Dijkstra jest informacyjny.


    Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.