17Aug
Liczenie od zera jest bardzo powszechną praktyką w wielu językach komputerowych, ale dlaczego? Czytaj dalej, kiedy badamy zjawisko i dlaczego jest ono tak powszechne.
Dzisiejsze pytanie &Sesja odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupy Q & A.
Pytanie Czytelnik
SuperUser DragonLord jest ciekawy, dlaczego większość systemów operacyjnych i języków programowania liczy się od zera. 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, licząc 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 spostrzeżenia:
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 * wielkość_zamiastemJeśli pierwszy element zostanie uznany za pierwszy, obliczeniastaje się elementem
( n) = adresem +( n-1) * size_of_the_elementNie jest to duża różnica, ale dodaje niepotrzebne odejmowanie dla każdego dostępu.
Edytowane w celu dodania:
- Użycie indeksu tablicy jako przesunięcia nie jest wymogiem, ale zwyczajnym 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ź, artykuł Dijkstra jest informacyjny.
Czy chcesz coś dodać 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.