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.