Oktalowy system liczbowy jest systemem liczbowym o podstawie 8. Używa się w nim cyfr od 0 do 7. System ten jest podobny do binarnego (podstawa 2) i szesnastkowego (podstawa 16). Liczby ósemkowe są zapisywane przy użyciu litery o przed liczbą, na przykład o04 lub o1242. Liczby oktalne są również czasami zapisywane z małą ósemką na dole po prawej stronie, jak w 12428. System ósemkowy jest systemem pozycyjnym — wartość cyfry zależy od jej pozycji i odpowiada kolejnym potęgom liczby 8 (8^0, 8^1, 8^2 itd.).
Zapis i konwersje
Podstawowe zasady konwersji:
- Ósemkowy → dziesiętny: Każdą cyfrę mnożymy przez odpowiednią potęgę 8 i dodajemy wyniki. Przykład: o1242 = 1·8^3 + 2·8^2 + 4·8^1 + 2·8^0 = 512 + 128 + 32 + 2 = 674 (w systemie dziesiętnym).
- Dziesiętny → ósemkowy: Dzielimy liczbę przez 8, zapisujemy reszty od końca. Przykład: 100(10) → 100 ÷ 8 = 12 r.4, 12 ÷ 8 = 1 r.4, 1 ÷ 8 = 0 r.1 → zapis o144.
- Binarne ↔ ósemkowe: Ponieważ 8 = 2^3, każdej cyfrze ósemkowej odpowiada dokładnie trzycyfrowy blok binarny (000–111). Aby przejść z binarnego do ósemkowego, grupujemy bity po trzy, zaczynając od prawej; aby przejść odwrotnie, każdą cyfrę ósemkową zastępujemy odpowiadającym jej trójbitem. Przykład: binarne 1101011 = (001)(101)(011) → 1 5 3 → o153.
- Ósemkowy ↔ szesnastkowy: Najwygodniej przez pośrednictwo systemu binarnego — grupy po trzy bity dla ósemkowego i po cztery bity dla szesnastkowego.
Notacja w informatyce i programowaniu
W różnych językach programowania istnieją różne konwencje zapisu liczb ósemkowych:
- W wielu dialektach języka C i w kodzie Unix historycznie liczby zaczynające się od zera (np. 0755) były traktowane jako oktalne.
- Współczesne języki często używają prefiksu 0o lub 0O (np. Python: 0o755) żeby jednoznacznie oznaczyć podstawę 8.
- Czasami stosuje się zapis z indeksem dolnym, np. 1242₈, albo mniej standardowo sufiks o, jak w o1242 — formy te zależą od konwencji w danym tekście lub środowisku.
Zastosowania
- Historia informatyki: System ósemkowy był powszechny przy pracy z wczesnymi komputerami, których słowa maszynowe miały długości będące wielokrotnością 3 bitów (np. 12, 24, 36). Umożliwiał on prostszą reprezentację i odczyt grup bitów niż bezpośredni zapis binarny. Przykładowo komputery takie jak PDP-8 używały intensywnie ósemkowego zapisu.
- Unix i uprawnienia plików: W systemach Unix/Linux prawa dostępu do plików są często zapisywane w formie ósemkowej (trzy cyfry: właściciel, grupa, inni). Każda cyfra odpowiada trzem bitom (czytanie/radio/zapis — r=4, w=2, x=1). Przykład: 755 oznacza rwx (7) dla właściciela i rx (5) dla grupy i pozostałych użytkowników.
- Elektronika i programowanie niskopoziomowe: W niektórych aplikacjach wbudowanych, w oprogramowaniu dla starszych procesorów lub przy debugowaniu rejestrów możliwe jest użycie zapisu ósemkowego.
- Kulturowe systemy liczenia: Niektóre społeczności liczą w oparciu o podstawę 8 — na przykład, jak opisano w literaturze, rdzenni Amerykanie używający języka Yuki w Kalifornii i języków Pamean w Meksyku, używają ósemkowego systemu liczbowego. Robią to, ponieważ podczas liczenia wykorzystują odstępy między palcami zamiast liczyć same palce.
W praktyce — uwagi i pułapki
- W kodzie źródłowym błędne rozpoznanie zapisu jako oktalnego (np. przypadkowe poprzedzenie liczb zerem) może prowadzić do trudnych do wykrycia błędów. Przykład: w C liczba 010 to nie dziesięć, lecz osiem.
- Obecnie, ze względu na popularność architektur 32- i 64-bitowych oraz powszechność systemu szesnastkowego (który lepiej pasuje do grup po 4 bity), ósemkowy jest rzadziej używany w nowych projektach niż kiedyś.
Podsumowując, system ósemkowy (oktalny) to praktyczny system pozycyjny o podstawie 8, przydatny do kompakcyjnego przedstawiania grup po 3 bity w informatyce i spotykany też w niektórych kulturach liczących. Znajomość konwersji między systemami oraz rozmaitych notacji (0-prefiks, 0o, indeks, sufiks) jest użyteczna zarówno w pracy z historycznym kodem, jak i przy interpretacji ustawień systemowych, takich jak prawa dostępu w Unix/Linux.