If-Koubou

Dlaczego komputery liczą od zera?

Dlaczego komputery liczą od zera? (Jak)


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, społecznościowego forum 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, 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 informacje:

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

Jeśli tablica jest przechowywana w określonej 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.