Ciekawostki

Dlaczego programiści liczą od zera?

10 czerwca 2026 2 min czytania web-pc.pl 6 komentarzy

Pierwszy element listy ma numer 0. Brzmi jak złośliwość, a jest jedną z tych decyzji, które kiedyś oszczędzały pracę procesorowi, a dziś po prostu zostały z nami na dobre.

Dlaczego programiści liczą od zera?

Każdy, kto zaczyna programować, przechodzi przez ten sam moment zdziwienia. Robisz listę pięciu rzeczy, chcesz wyciągnąć pierwszą i piszesz lista[1]. Dostajesz drugą. Pierwsza siedzi pod numerem zero.

To nie fanaberia, tylko adresowanie

Tablica w pamięci to po prostu ciąg komórek leżących obok siebie. Program zna adres pierwszej z nich i wielkość jednego elementu. Żeby dostać się do dowolnego, liczy tak:

adres elementu = adres_poczatku + numer * rozmiar_elementu

Przy liczeniu od zera pierwszy element to adres_poczatku + 0, czyli sam początek. Nic nie trzeba odejmować. Gdyby liczyć od jedynki, w każdym takim rachunku trzeba by dopisywać minus jeden — miliony razy na sekundę, w czasach, gdy każda instrukcja procesora była na wagę złota.

Numer to nie licznik, tylko przesunięcie

Najprościej zapamiętać to tak: numer w nawiasie nie odpowiada na pytanie „który to z kolei", tylko „o ile jesteś od początku". Pierwszy element jest o zero kroków od początku. Drugi o jeden krok. To ta sama logika, którą znasz z windy: parter nie jest pierwszym piętrem, tylko zerowym, bo jesteś zero pięter nad ziemią.

Przy okazji: dwa miłe efekty uboczne

  • Zakresy nie mają dziur. Jeśli podzielisz listę stu elementów na fragmenty 0–50 i 50–100, nic się nie zgubi i nic nie zdubluje. Przy liczeniu od jedynki trzeba pilnować, czy pięćdziesiątka należy do pierwszego kawałka, czy do drugiego.
  • Długość wychodzi sama. Odejmujesz koniec od początku i masz liczbę elementów. Bez plus jeden, bez minus jeden.

Są języki, które robią inaczej — Lua, R czy MATLAB liczą od jedynki, bo pisano je z myślą o matematykach, a nie o pamięci komputera. Nikt się nie myli, po prostu przyjęto inną konwencję.

Największą zaletą liczenia od zera nie jest szybkość, tylko to, że wszystkie języki poza garstką wyjątków robią to tak samo.

Jest jeszcze stary żart, który zna każdy programista: dwa najtrudniejsze problemy w informatyce to unieważnianie cache, nazywanie rzeczy i błędy o jeden. Właśnie o ten jeden chodzi.

Podziel się:

Komentarze (6)

  1. Marek

    Uczę się programować od pół roku i to pierwszy tekst, po którym naprawdę zrozumiałem, o co chodzi z tym zerem. Porównanie z parterem budynku zapadło mi w pamięć.

    Odpowiedz
  2. Marek

    Uczę się programować od pół roku i to pierwszy tekst, po którym naprawdę zrozumiałem, o co chodzi z tym zerem. Porównanie z parterem budynku zapadło mi w pamięć.

    Odpowiedz
  3. kasia_dev

    Dorzucę, że w Pascalu można było ustawić dowolny początek indeksu. Brzmi wygodnie, a w praktyce robił się z tego niezły bałagan przy przenoszeniu kodu.

    Odpowiedz
  4. kasia_dev

    Dorzucę, że w Pascalu można było ustawić dowolny początek indeksu. Brzmi wygodnie, a w praktyce robił się z tego niezły bałagan przy przenoszeniu kodu.

    Odpowiedz
  5. Tomek W.

    Ten żart o błędach o jeden powinien wisieć w każdej sali szkoleniowej. Ile ja się przez to nasiedziałem nad kodem.

    Odpowiedz
  6. Tomek W.

    Ten żart o błędach o jeden powinien wisieć w każdej sali szkoleniowej. Ile ja się przez to nasiedziałem nad kodem.

    Odpowiedz
Odpowiadasz na komentarz: Marek anuluj

Twoja odpowiedź

Komentarz pojawi się po zatwierdzeniu przez moderatora. Adres e-mail nie jest publikowany.

Przeczytaj też

Robimy strony, które są szybkie nie tylko na papierze.

Poproś o darmową wycenę