System liczbowy – zbiór reguł jednolitego zapisu i nazewnictwa liczb.
Do zapisywania liczb używa się skończonego zbioru znaków, zwanych cyframi, które można łączyć w dowolnie długie ciągi, otrzymując nieskończoną liczbę kombinacji.
Najbardziej prymitywnym systemem liczbowym jest jedynkowy system liczbowy, w którym występuje tylko jeden znak (np. 1, albo (częściej) pionowa kreska). W systemie tym kolejne liczby są tworzone przez proste powtarzanie tego znaku. Np. 3 w tym systemie jest równe 111, a pięć 11111. Systemem takim posługują się np. Pigmeje[potrzebny przypis]. W przypadku większych liczb, kiedy zaczyna się grupować symbole, np. po 5 (cztery równoległe kreski, przekreślone piątą), mamy do czynienia z przejściem do addytywnego systemu liczbowego.
Bardziej złożone systemy liczbowe można już podzielić na:
Sześćdziesiątkowy system liczbowy, stosowany w Mezopotamii, w którym podstawowymi wielokrotnościami były 10 i 60, był częściowo addytywny, częściowo pozycyjny. Jest on najstarszym znanym systemem każdego z tych dwóch rodzajów. W życiu codziennym spotykamy ślady babilońskiego systemu w podziale godziny na 60 minut, a minuty na 60 sekund, oraz w podziale kąta na minuty i sekundy kątowe.
Zaletą systemów addytywnych jest możliwość zapisu nawet dużych liczb (pod warunkiem, że są okrągłe) za pomocą jednego znaku, a wadą złożoność, kłopoty interpretacyjne i zbyt wielka liczba cyfr przy mało okrągłych liczbach, oraz bardzo skomplikowany sposób dokonywania za ich pomocą prostych operacji arytmetycznych, wymagający zapamiętywania długich tabel.
Zaletą systemów pozycyjnych jest ich klarowność, łatwość dokonywania nawet złożonych operacji arytmetycznych oraz możliwość zapisu dowolnie dużej liczby, jednak do zapisu bardzo dużych liczb (nawet okrągłych) jest potrzebna duża liczba cyfr.
Współcześnie powszechnie używany jest system dziesiątkowy. W informatyce najbardziej rozpowszechniony jest system dwójkowy (binarny). Często stosowany jest również ósemkowy (oktalny) i szesnastkowy (heksadecymalny).
Istnieją również systemy liczbowe, których podstawa nie jest liczbą całkowitą, np. 3/2[1].
Z racji reprezentacji liczb w pamięci komputerów za pomocą bitów, najbardziej naturalnym systemem w informatyce jest dwójkowy system liczbowy.
W okresie pionierskich czasów komputeryzacji ważną rolę odgrywał system ósemkowy, który spotyka się niekiedy do dziś.
Natomiast naturalny dla ludzi system dziesiętny został wprowadzony dopiero wraz z powstaniem języków programowania wyższego poziomu, których celem było jak największe ułatwienie w korzystaniu z komputerów.
Ze względu na specyfikę architektury komputerów, gdzie często najszybszy dostęp jest do adresów parzystych, albo podzielnych przez 4, 8 czy 16, często używany jest szesnastkowy system liczbowy. Sprawdza się on szczególnie przy zapisie dużych liczb takich jak adresy pamięci, zakresy parametrów itp. Na przykład:
1000016 i 10000000016 są znacznie łatwiejsze do zapamiętania.
System szesnastkowy często stosowany jest też na stronach WWW (HTML, CSS), gdzie służy do określania kolorów poszczególnych elementów wyświetlanej zawartości strony.
Przykład rekurencyjnej funkcji w C/C++, konwertującej liczby naturalne na system trójkowy:
Konwersja części ułamkowej liczby polega na mnożeniu jej przez podstawę nowego systemu i odpisywaniu powstałej części całkowitej.