Skip to main content
Szesnastkowy
FF

Przewodnik po systemie szesnastkowym

System heksadycymalny (szesnastkowy)

System szesnastkowy używa 16 symboli: 0-9 i A-F (A=10, B=11, C=12, D=13, E=14, F=15). Jest skróconym zapisem binarnego - każde 4 bity to jedna cyfra hex. Np. 11111111₂ = FF₁₆ = 255₁₀. Używany w programowaniu i kolorach.

Dlaczego hex jest ważny

Binarnie 255 to 11111111 (8 cyfr). Heksadycymalnie FF (2 znaki) - łatwiejsze do odczytania i wpisywania przez ludzi. Adresy pamięci, kolory RGB, punkty kodowe Unicode używają hex. Definicje kolorów w CSS: #FF0000 (czerwony), #00FF00 (zielony), #0000FF (niebieski).

Praktyczne zastosowania

W CSS kolory: #3498db niebieski, #2ecc342 zielony. W UUID v5: 550e8400-ea29-41d3-af15-6528adf68cc2. Bajty ROM/EEPROM dumpowane jako hex. MAC adresy: aa:bb:cc:dd:ee:ff. W debugerach adresy pamięci jako 0x0040A7C0.

#888 to nie #808080, a skrót CSS obejmuje 0,02% kolorów

Zapis szesnastkowy to zwięźle dwójkowy: jedna cyfra to dokładnie cztery bity, więc dwie cyfry to jeden bajt. Dlatego kolor zapisuje się jako trzy pary. Trzycyfrowy skrót w CSS rozwija się przez podwojenie każdej cyfry, a nie przez skalowanie, co oznacza, że większość kolorów w ogóle nie ma skrótu — w tym szarość średnia.

Jak to działa

  • Przelicza między systemem szesnastkowym, dziesiętnym i dwójkowym, gdzie każda cyfra szesnastkowa to cztery bity.
  • Obsługuje wartości kolorów, gdzie dwie cyfry szesnastkowe dają 256 poziomów jednego kanału.
  • Uwidacznia odpowiedniość cyfra–bity, bo na niej opierają się wszystkie te konwencje.
1 cyfra szesnastkowa  = 4 bity = 16 wartości (0–F)
2 cyfry szesnastkowe  = 8 bitów = 256 wartości (00–FF)

#RRGGBB = 3 kanały × 8 bitów = 24 bity = 16 777 216 kolorów
skrót #RGB rozwija się przez podwojenie: #F0A → #FF00AA

Przykład z liczbami

Porównanie pełnej formy sześciocyfrowej ze skrótem trzycyfrowym.

  1. #RRGGBB to 24 bity: 16 777 216 kolorów
  2. #RGB to 12 bitów: 4096 kolorów
  3. skrót pokrywa 0,0244% przestrzeni
  4. #888 rozwija się do #888888 = 136 na kanał
  5. ale szarość średnia to #808080 = 128 na kanał

#888 i #808080 różnią się o 8 poziomów w każdym kanale, a żaden kod trzycyfrowy nie daje #808080. Skrót nie jest skrótem wszystkich kolorów — to niewielki podzbiór, który akurat da się zapisać o połowę krócej.

Jak czytać wynik

  • Rozwinięcie podwaja cyfrę, a nie skaluje zakresu. #A staje się #AA, a nie wartością umieszczoną proporcjonalnie — dlatego paleta skrótowa trafia na 0x00, 0x11, 0x22 i tak dalej co 17, omijając wszystko pomiędzy.
  • System szesnastkowy przetrwał, bo odwzorowanie na binarny jest ścisłe i mechaniczne. Bajt to zawsze dwa znaki, konwersja nie wymaga rachunków i nie ma zaokrąglania, które wprowadziłoby błąd — te same powody stoją za użyciem go do skrótów, adresów MAC i zrzutów pamięci.
  • Wielkość liter nie ma znaczenia w wartościach kolorów ani w większości parserów: #FF00AA i #ff00aa są identyczne. Liczy się w skrótach tylko tam, gdzie specyfikacja tak mówi, a porównywanie ciągów szesnastkowych bez ujednolicenia wielkości liter to częste źródło fałszywych niezgodności.
  • Przedrostek 0x oznacza zapis szesnastkowy w większości języków programowania, # oznacza go w CSS, a część kontekstów nie używa żadnego. Goły ciąg cyfr i liter jest niejednoznaczny — 10 to dziesięć dziesiętnie i szesnaście szesnastkowo, a same znaki tego nie rozstrzygają.

Częste pytania

Dlaczego kolory zapisuje się szesnastkowo, a nie dziesiętnie?
Bo każdy kanał to jeden bajt, a jeden bajt to dokładnie dwie cyfry szesnastkowe. Dziesiętnie ten sam kolor to rgb(255, 0, 170) — trzy liczby o zmiennej długości z separatorami wobec sześciu stałych znaków dzielących się czysto na kanały.
Czy każdy kolor szesnastkowy da się skrócić?
Tylko wtedy, gdy każda para to powtórzona cyfra. #FF00AA skraca się do #F0A, bo każda para się powtarza; #808080 nie da się skrócić wcale, bo 80 nie jest podwojoną cyfrą. Skrót ma mniej więcej jeden kolor na 4096.