17Aug

Dlaczego komputery liczą od zera?


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ść_zamiastem

Jeśli pierwszy element zostanie uznany za pierwszy, obliczeniastaje się elementem

( n) = adresem +( 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 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.