Liczenie od zera jest bardzo powszechną praktyką w wielu językach komputerowych, ale dlaczego? Czytaj dalej, gdy badamy to zjawisko i dlaczego jest tak powszechne.
Dzisiejsza sesja pytań i odpowiedzi jest dostępna dzięki uprzejmości SuperUser - części Stack Exchange, grupy witryn internetowych 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 zliczają wartości liczbowe zaczynając od zera. Na przykład tablice w językach programowania opartych na języku C zaczynają się od indeksu zero.
Jakie istnieją historyczne powody takiego stanu rzeczy i jakie praktyczne zalety ma liczenie od zera w porównaniu z liczeniem od jedynki?
Rzeczywiście, dlaczego? Choć praktyka jest powszechna, z pewnością istnieją praktyczne powody, dla których warto ją wdrożyć.
Odpowiedź
Współautor SuperUser Matteo oferuje następujące spostrzeżenia:
Liczenie tablic od 0 upraszcza obliczanie adresu pamięci każdego elementu.
Jeśli tablica jest przechowywana w określonej pozycji w pamięci (nazywa się to adresem), pozycję każdego elementu można obliczyć jako
element (n) = adres + n * size_of_the_elementJeśli weźmiesz pod uwagę pierwszy element jako pierwszy, obliczenie stanie się
element (n) = adres + (n-1) * size_of_the_elementNie jest to duża różnica, ale dodaje niepotrzebne odejmowanie przy każdym dostępie.
Edytowano, aby dodać:
- Użycie indeksu tablicy jako przesunięcia nie jest wymogiem, a jedynie nawykiem. Przesunięcie pierwszego elementu mogłoby być ukryte przez system i brane pod uwagę podczas przydzielania i odwoływania się do elementu.
- Dijkstra opublikował artykuł „Dlaczego numeracja powinna zaczynać się od zera” ( pdf ), gdzie wyjaśnia, dlaczego rozpoczęcie od 0 jest lepszym wyborem. Rozpoczynanie od zera umożliwia lepszą reprezentację zakresów.
Jeśli chcesz zagłębić się w odpowiedź, artykuł Dijkstry jest pouczającą lekturą.
Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych zaawansowanych technicznie użytkowników Stack Exchange? Sprawdź cały wątek dyskusji tutaj .