System szesnastkowy – zasady działania, konwersja liczb, zastosowania i praktyczne przykłady

System szesnastkowy – zasady działania, konwersja liczb, zastosowania i praktyczne przykłady

System szesnastkowy to jeden z najważniejszych systemów liczbowych wykorzystywanych w informatyce, elektronice cyfrowej, programowaniu, adresowaniu pamięci, grafice komputerowej i analizie danych binarnych. Choć na początku może wydawać się mniej intuicyjny niż system dziesiętny, w praktyce jest niezwykle wygodnym sposobem zapisywania dużych wartości binarnych w krótszej, bardziej czytelnej formie. Zamiast długich ciągów zer i jedynek można użyć cyfr od 0 do 9 oraz liter od A do F, co znacznie ułatwia pracę z kodem maszynowym, kolorami HTML, adresami pamięci, bajtami, maskami bitowymi i danymi zapisanymi w komputerze.

Najprościej mówiąc, system szesnastkowy to system pozycyjny o podstawie 16. Oznacza to, że każda pozycja liczby reprezentuje kolejną potęgę liczby 16. W systemie dziesiętnym używamy dziesięciu symboli, od 0 do 9. W systemie szesnastkowym potrzebujemy szesnastu symboli, dlatego po cyfrze 9 pojawiają się litery: A, B, C, D, E, F. Litery te oznaczają wartości od 10 do 15.

Spis treści

  1. Czym jest system szesnastkowy?
  2. Dlaczego system szesnastkowy ma podstawę 16?
  3. Cyfry i symbole w systemie szesnastkowym
  4. System szesnastkowy jako system pozycyjny
  5. System szesnastkowy a system dziesiętny
  6. System szesnastkowy a system binarny
  7. Jak zamienić liczbę szesnastkową na dziesiętną?
  8. Jak zamienić liczbę dziesiętną na szesnastkową?
  9. Jak zamienić liczbę binarną na szesnastkową?
  10. Jak zamienić liczbę szesnastkową na binarną?
  11. Dodawanie w systemie szesnastkowym
  12. Odejmowanie w systemie szesnastkowym
  13. Mnożenie i dzielenie w systemie szesnastkowym
  14. Zapis liczb szesnastkowych w programowaniu
  15. System szesnastkowy w kolorach HTML i CSS
  16. System szesnastkowy w pamięci komputera
  17. System szesnastkowy w elektronice cyfrowej
  18. System szesnastkowy w adresach MAC, Unicode i kodowaniu danych
  19. Najczęstsze błędy przy nauce systemu szesnastkowego
  20. FAQ – najczęściej zadawane pytania

Czym jest system szesnastkowy?

System szesnastkowy to system zapisu liczb, który wykorzystuje szesnaście różnych symboli. Jest systemem pozycyjnym, podobnie jak system dziesiętny, binarny czy ósemkowy. Różnica polega na podstawie. System dziesiętny ma podstawę 10, system binarny ma podstawę 2, a system szesnastkowy ma podstawę 16.

W systemie dziesiętnym każda kolejna pozycja liczby oznacza potęgę liczby 10. Na przykład liczba 345 oznacza:

3 × 100 + 4 × 10 + 5 × 1

czyli:

3 × 10² + 4 × 10¹ + 5 × 10⁰

W systemie szesnastkowym działa ta sama zasada, ale podstawą jest 16. Liczba szesnastkowa 2A oznacza:

2 × 16¹ + A × 16⁰

Ponieważ A = 10, otrzymujemy:

2 × 16 + 10 × 1 = 32 + 10 = 42

Oznacza to, że liczba 2A w systemie szesnastkowym ma wartość 42 w systemie dziesiętnym.

Inne nazwy systemu szesnastkowego

System szesnastkowy bywa określany również jako:

  • system heksadecymalny,
  • system hex,
  • zapis hex,
  • notacja szesnastkowa,
  • base 16,
  • system o podstawie 16.

W programowaniu i dokumentacji technicznej bardzo często spotyka się skrót hex, pochodzący od angielskiego słowa hexadecimal.

Dlaczego warto znać system szesnastkowy?

Znajomość systemu szesnastkowego jest szczególnie ważna dla osób uczących się:

  • programowania,
  • informatyki,
  • elektroniki,
  • sieci komputerowych,
  • cyberbezpieczeństwa,
  • grafiki komputerowej,
  • mikrokontrolerów,
  • architektury komputerów,
  • analizy plików binarnych.

System szesnastkowy pozwala wygodnie zapisywać dane binarne, które w komputerach są podstawową formą reprezentacji informacji. Jeden znak szesnastkowy odpowiada dokładnie czterem bitom, co sprawia, że konwersja między systemem binarnym a szesnastkowym jest bardzo prosta.

Dlaczego system szesnastkowy ma podstawę 16?

Podstawa 16 nie jest przypadkowa. Wynika z bardzo wygodnego związku między systemem szesnastkowym a systemem binarnym. Komputery operują na bitach, czyli wartościach 0 i 1. Cztery bity mogą utworzyć dokładnie 16 różnych kombinacji:

  • od 0000,
  • do 1111.

A ponieważ system szesnastkowy ma dokładnie 16 symboli, każdą grupę czterech bitów można zapisać jako jeden znak szesnastkowy.

Cztery bity jako jedna cyfra hex

Cztery bity, czyli tak zwany nibble, mogą przyjmować wartości od 0 do 15. To dokładnie tyle, ile symboli występuje w systemie szesnastkowym.

Przykład:

BinarnieDziesiętnieSzesnastkowo000000000111001022001133010044010155011066011177100088100199101010A101111B110012C110113D111014E111115F

Dzięki temu liczba binarna:

1111 0000 1010 0101

może zostać zapisana jako:

F0A5

To ogromne uproszczenie. Zamiast 16 znaków binarnych otrzymujemy tylko 4 znaki szesnastkowe.

System szesnastkowy a bajty

Jeden bajt składa się z 8 bitów. Ponieważ jedna cyfra szesnastkowa odpowiada czterem bitom, jeden bajt można zapisać za pomocą dwóch cyfr szesnastkowych.

Przykłady:

  • 00000000 = 00
  • 00000001 = 01
  • 00001111 = 0F
  • 11111111 = FF

Wartość FF w systemie szesnastkowym odpowiada liczbie 255 w systemie dziesiętnym. Jest to największa wartość, jaką można zapisać w jednym bajcie bez znaku.

Cyfry i symbole w systemie szesnastkowym

W systemie dziesiętnym mamy 10 cyfr:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

W systemie szesnastkowym potrzebujemy 16 symboli. Pierwsze dziesięć jest takie samo jak w systemie dziesiętnym, a kolejne sześć zapisuje się literami:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Wartości liter w systemie szesnastkowym

Litery mają następujące wartości:

Symbol hexWartość dziesiętnaA10B11C12D13E14F15

To jedna z najważniejszych rzeczy do zapamiętania. W zapisie szesnastkowym litera A nie oznacza zmiennej ani tekstu, lecz cyfrę o wartości 10. Podobnie F oznacza cyfrę o wartości 15.

Wielkie i małe litery

W większości zastosowań wielkość liter nie ma znaczenia. Zapis:

AF3C

oznacza to samo co:

af3c

oraz:

Af3c

W dokumentacji technicznej, programowaniu i zapisie kolorów często stosuje się wielkie litery dla czytelności, ale małe litery są również poprawne, jeśli dane narzędzie lub język programowania je akceptuje.

Największa pojedyncza cyfra w systemie szesnastkowym

W systemie dziesiętnym największą pojedynczą cyfrą jest 9. Po niej następuje 10, czyli zwiększenie liczby pozycji.

W systemie szesnastkowym największą pojedynczą cyfrą jest F, czyli 15 dziesiętnie. Po F następuje:

10 hex

Nie oznacza to dziesięciu w systemie dziesiętnym. Oznacza to:

1 × 16 + 0 = 16

Dlatego:

  • 9 hex = 9 dec,
  • A hex = 10 dec,
  • F hex = 15 dec,
  • 10 hex = 16 dec,
  • 11 hex = 17 dec,
  • 1F hex = 31 dec,
  • 20 hex = 32 dec.

System szesnastkowy jako system pozycyjny

System szesnastkowy jest systemem pozycyjnym, co oznacza, że wartość cyfry zależy od jej pozycji w liczbie. Ta sama cyfra może oznaczać różne wartości, zależnie od miejsca, w którym się znajduje.

W liczbie dziesiętnej 222 każda cyfra 2 ma inną wagę:

  • pierwsza od prawej oznacza 2 jedności,
  • druga oznacza 2 dziesiątki,
  • trzecia oznacza 2 setki.

W systemie szesnastkowym działa ta sama zasada, ale wagi pozycji są potęgami liczby 16.

Wagi pozycji w systemie szesnastkowym

Od prawej strony kolejne pozycje mają wagi:

  • 16⁰ = 1,
  • 16¹ = 16,
  • 16² = 256,
  • 16³ = 4096,
  • 16⁴ = 65536,
  • 16⁵ = 1048576,
  • 16⁶ = 16777216.

Przykład liczby 3F2:

  • 2 znajduje się na pozycji 16⁰,
  • F znajduje się na pozycji 16¹,
  • 3 znajduje się na pozycji 16².

Obliczenie:

3F2 hex = 3 × 16² + F × 16¹ + 2 × 16⁰

Ponieważ F = 15:

3 × 256 + 15 × 16 + 2 × 1 = 768 + 240 + 2 = 1010

Czyli:

3F2 hex = 1010 dec

Dlaczego pozycja jest tak ważna?

W systemie pozycyjnym symbol sam w sobie nie wystarcza. Liczy się również jego położenie. Cyfra A może oznaczać:

  • 10, jeśli stoi na pozycji jedności,
  • 160, jeśli stoi na pozycji szesnastek,
  • 2560, jeśli stoi na pozycji 256,
  • 40960, jeśli stoi na pozycji 4096.

Przykład:

A0 hex = 10 × 16 + 0 = 160 dec

Natomiast:

0A hex = 0 × 16 + 10 = 10 dec

Te dwie liczby mają zupełnie inną wartość, mimo że zawierają ten sam symbol A.

System szesnastkowy a system dziesiętny

System dziesiętny jest dla ludzi naturalny, ponieważ używamy go na co dzień. System szesnastkowy jest natomiast bardziej naturalny dla zapisu danych komputerowych. Różnica między nimi polega głównie na podstawie i liczbie używanych symboli.

Porównanie systemu dziesiętnego i szesnastkowego

CechaSystem dziesiętnySystem szesnastkowyPodstawa1016Symbole0–90–9, A–FKolejna liczba po 910ANajwiększa jedna cyfra9FTypowe zastosowaniecodzienne liczenieinformatyka i elektronikaWagi pozycji1, 10, 100, 10001, 16, 256, 4096

Liczenie w systemie szesnastkowym

Początkowy ciąg liczb w systemie szesnastkowym wygląda tak:

DziesiętnieSzesnastkowo0011223344556677889910A11B12C13D14E15F1610171118121913201421152216231724182519261A271B281C291D301E311F3220

Warto zwrócić uwagę, że 10 w systemie szesnastkowym oznacza 16 w systemie dziesiętnym. To częsty punkt nieporozumień u osób początkujących.

System szesnastkowy a system binarny

Największą zaletą systemu szesnastkowego jest jego bezpośredni związek z systemem binarnym. Komputery przechowują informacje w postaci bitów, ale długie ciągi bitów są trudne do czytania przez człowieka. System szesnastkowy pozwala je skrócić i uporządkować.

Dlaczego system binarny jest niewygodny dla człowieka?

Liczba binarna może wyglądać tak:

110101101011001011110001

Dla komputera taki zapis jest naturalny. Dla człowieka jest mało czytelny. Łatwo pomylić jedną cyfrę, trudno szybko ocenić wartość, a porównywanie długich ciągów jest męczące.

Po podzieleniu tej liczby na grupy po cztery bity:

1101 0110 1011 0010 1111 0001

możemy zamienić każdą grupę na jedną cyfrę szesnastkową:

  • 1101 = D,
  • 0110 = 6,
  • 1011 = B,
  • 0010 = 2,
  • 1111 = F,
  • 0001 = 1.

Otrzymujemy:

D6B2F1

To znacznie krótszy i bardziej czytelny zapis.

Jeden znak hex to cztery bity

Ta zależność jest absolutnie kluczowa:

1 cyfra szesnastkowa = 4 bity

Dlatego:

2 cyfry szesnastkowe = 8 bitów = 1 bajt

4 cyfry szesnastkowe = 16 bitów = 2 bajty

8 cyfr szesnastkowych = 32 bity = 4 bajty

16 cyfr szesnastkowych = 64 bity = 8 bajtów

To dlatego wartości 8-bitowe, 16-bitowe, 32-bitowe i 64-bitowe bardzo często zapisuje się w systemie szesnastkowym.

Przykłady binarnie i szesnastkowo

BinarnieSzesnastkowoDziesiętnie0000 00000000000 00010110000 11110F150001 000010160111 11117F1271000 0000801281111 1111FF255

Dzięki temu zapis szesnastkowy jest niezwykle popularny tam, gdzie trzeba pracować z bajtami, rejestrami, pamięcią i kodowaniem danych.

Jak zamienić liczbę szesnastkową na dziesiętną?

Zamiana liczby z systemu szesnastkowego na dziesiętny polega na rozpisaniu jej według potęg liczby 16. Każdą cyfrę mnożymy przez wagę pozycji, a następnie sumujemy wyniki.

Ogólna metoda

Aby zamienić liczbę hex na dec:

  1. Zapisz wartość każdej cyfry.
  2. Przypisz pozycjom kolejne potęgi liczby 16 od prawej strony.
  3. Pomnóż każdą cyfrę przez jej wagę.
  4. Dodaj wszystkie wyniki.

Przykład 1: 2A hex

Liczba:

2A

Pozycje:

  • A na pozycji 16⁰,
  • 2 na pozycji 16¹.

Obliczenie:

2A = 2 × 16¹ + A × 16⁰

Ponieważ A = 10:

2 × 16 + 10 × 1 = 32 + 10 = 42

Wynik:

2A hex = 42 dec

Przykład 2: FF hex

Liczba:

FF

Obliczenie:

F × 16¹ + F × 16⁰

Ponieważ F = 15:

15 × 16 + 15 × 1 = 240 + 15 = 255

Wynik:

FF hex = 255 dec

Przykład 3: 1A3 hex

Liczba:

1A3

Pozycje:

  • 3 × 16⁰,
  • A × 16¹,
  • 1 × 16².

Obliczenie:

1 × 256 + 10 × 16 + 3 × 1 = 256 + 160 + 3 = 419

Wynik:

1A3 hex = 419 dec

Przykład 4: BEEF hex

Liczba:

BEEF

Wartości cyfr:

  • B = 11,
  • E = 14,
  • E = 14,
  • F = 15.

Pozycje:

  • B × 16³,
  • E × 16²,
  • E × 16¹,
  • F × 16⁰.

Obliczenie:

11 × 4096 + 14 × 256 + 14 × 16 + 15 × 1

= 45056 + 3584 + 224 + 15

= 48879

Wynik:

BEEF hex = 48879 dec

Przykład 5: 1000 hex

Liczba:

1000

Obliczenie:

1 × 16³ + 0 × 16² + 0 × 16¹ + 0 × 16⁰

= 4096

Wynik:

1000 hex = 4096 dec

Jak zamienić liczbę dziesiętną na szesnastkową?

Zamiana liczby dziesiętnej na szesnastkową najczęściej polega na dzieleniu przez 16 i zapisywaniu reszt. Reszty odczytujemy od końca.

Ogólna metoda dzielenia przez 16

Aby zamienić liczbę dziesiętną na hex:

  1. Podziel liczbę przez 16.
  2. Zapisz resztę z dzielenia.
  3. Wynik całkowity ponownie podziel przez 16.
  4. Powtarzaj, aż wynik całkowity będzie równy 0.
  5. Odczytaj reszty od ostatniej do pierwszej.
  6. Reszty 10–15 zamień na litery A–F.

Przykład 1: 42 dec na hex

Dzielimy:

42 ÷ 16 = 2 reszty 10

Reszta 10 to A.

Następnie:

2 ÷ 16 = 0 reszty 2

Odczytujemy reszty od końca:

2A

Wynik:

42 dec = 2A hex

Przykład 2: 255 dec na hex

Dzielimy:

255 ÷ 16 = 15 reszty 15

15 to F.

Następnie:

15 ÷ 16 = 0 reszty 15

15 to F.

Odczytujemy od końca:

FF

Wynik:

255 dec = FF hex

Przykład 3: 419 dec na hex

Dzielimy:

419 ÷ 16 = 26 reszty 3

26 ÷ 16 = 1 reszty 10

10 to A.

1 ÷ 16 = 0 reszty 1

Odczytujemy od końca:

1A3

Wynik:

419 dec = 1A3 hex

Przykład 4: 4096 dec na hex

Dzielimy:

4096 ÷ 16 = 256 reszty 0

256 ÷ 16 = 16 reszty 0

16 ÷ 16 = 1 reszty 0

1 ÷ 16 = 0 reszty 1

Odczytujemy od końca:

1000

Wynik:

4096 dec = 1000 hex

Przykład 5: 48879 dec na hex

Dzielimy:

48879 ÷ 16 = 3054 reszty 15 → F
3054 ÷ 16 = 190 reszty 14 → E
190 ÷ 16 = 11 reszty 14 → E
11 ÷ 16 = 0 reszty 11 → B

Odczyt od końca:

BEEF

Wynik:

48879 dec = BEEF hex

Jak zamienić liczbę binarną na szesnastkową?

Konwersja z systemu binarnego na szesnastkowy jest jedną z najprostszych. Wystarczy podzielić liczbę binarną na grupy po cztery bity, zaczynając od prawej strony, a następnie każdą grupę zamienić na jedną cyfrę hex.

Ogólna metoda

Aby zamienić binarnie na hex:

  1. Podziel liczbę binarną na grupy po 4 bity od prawej strony.
  2. Jeśli po lewej stronie brakuje bitów do pełnej grupy, dopisz zera.
  3. Każdą grupę zamień na odpowiadającą cyfrę szesnastkową.
  4. Połącz cyfry.

Przykład 1: 101010 bin

Liczba binarna:

101010

Dzielimy od prawej:

10 1010

Dopisujemy zera po lewej:

0010 1010

Zamieniamy grupy:

  • 0010 = 2,
  • 1010 = A.

Wynik:

101010 bin = 2A hex

Przykład 2: 11111111 bin

Liczba:

11111111

Dzielimy:

1111 1111

Zamieniamy:

  • 1111 = F,
  • 1111 = F.

Wynik:

11111111 bin = FF hex

Przykład 3: 1101011010110010 bin

Liczba:

1101011010110010

Dzielimy:

1101 0110 1011 0010

Zamieniamy:

  • 1101 = D,
  • 0110 = 6,
  • 1011 = B,
  • 0010 = 2.

Wynik:

1101011010110010 bin = D6B2 hex

Przykład 4: 100000000 bin

Liczba:

100000000

Dzielimy od prawej:

1 0000 0000

Dopisujemy zera:

0001 0000 0000

Zamieniamy:

  • 0001 = 1,
  • 0000 = 0,
  • 0000 = 0.

Wynik:

100000000 bin = 100 hex

Wartość ta odpowiada liczbie 256 w systemie dziesiętnym.

Jak zamienić liczbę szesnastkową na binarną?

Konwersja z systemu szesnastkowego na binarny jest odwrotnością poprzedniego procesu. Każdą cyfrę hex zamieniamy na dokładnie cztery bity.

Ogólna metoda

Aby zamienić hex na binarny:

  1. Weź każdą cyfrę szesnastkową osobno.
  2. Zamień ją na czterobitową reprezentację binarną.
  3. Połącz wszystkie grupy.
  4. Zera z lewej strony można pominąć, jeśli nie są potrzebne do zachowania długości bajtów.

Tabela konwersji hex na binarny

HexBinarnie00000100012001030011401005010160110701118100091001A1010B1011C1100D1101E1110F1111

Przykład 1: 2A hex

Liczba:

2A

Zamieniamy:

  • 2 = 0010,
  • A = 1010.

Wynik:

2A hex = 00101010 bin

Bez zer wiodących:

101010 bin

Przykład 2: FF hex

Liczba:

FF

Zamieniamy:

  • F = 1111,
  • F = 1111.

Wynik:

FF hex = 11111111 bin

Przykład 3: D6B2 hex

Liczba:

D6B2

Zamieniamy:

  • D = 1101,
  • 6 = 0110,
  • B = 1011,
  • 2 = 0010.

Wynik:

D6B2 hex = 1101011010110010 bin

Przykład 4: 0F hex

Liczba:

0F

Zamieniamy:

  • 0 = 0000,
  • F = 1111.

Wynik:

0F hex = 00001111 bin

Tutaj zera wiodące są ważne, jeśli zapisujemy pełny bajt. Wartość 0F oznacza bajt o wartości 15.

Dodawanie w systemie szesnastkowym

Dodawanie w systemie szesnastkowym działa podobnie jak dodawanie w systemie dziesiętnym, ale przeniesienie następuje po przekroczeniu wartości 15, a nie 9.

Zasada przeniesienia

W systemie dziesiętnym:

9 + 1 = 10

W systemie szesnastkowym:

F + 1 = 10 hex

Ponieważ F oznacza 15, a 15 + 1 = 16, co w systemie szesnastkowym zapisujemy jako 10.

Przykład 1: A + 5

A oznacza 10.

A + 5 = 15

15 w hex to F.

Wynik:

A + 5 = F

Przykład 2: A + 6

A oznacza 10.

10 + 6 = 16

16 dziesiętnie to 10 hex.

Wynik:

A + 6 = 10 hex

Oznacza to, że zapisujemy 0 i przenosimy 1 do kolejnej pozycji.

Przykład 3: 1F + 01

Dodajemy:

  1F
+ 01
----
20

Wyjaśnienie:

  • F + 1 = 10 hex, zapisujemy 0 i przenosimy 1,
  • 1 + 1 = 2.

Wynik:

1F + 01 = 20 hex

Dziesiętnie: 31 + 1 = 32.

Przykład 4: 2A + 15

Dodajemy:

  2A
+ 15
----
3F

Wyjaśnienie:

  • A + 5 = F,
  • 2 + 1 = 3.

Wynik:

2A + 15 = 3F hex

Sprawdzenie dziesiętne:

  • 2A = 42,
  • 15 hex = 21,
  • 42 + 21 = 63,
  • 3F hex = 63.

Przykład 5: FF + 01

Dodajemy:

  FF
+ 01
----
100

Wyjaśnienie:

  • F + 1 = 10 hex, zapisujemy 0, przenosimy 1,
  • F + 1 = 10 hex, zapisujemy 0, przenosimy 1,
  • pozostaje dodatkowa 1 z przeniesienia.

Wynik:

FF + 01 = 100 hex

Dziesiętnie: 255 + 1 = 256.

Odejmowanie w systemie szesnastkowym

Odejmowanie w systemie szesnastkowym również przypomina odejmowanie dziesiętne. Jeśli nie da się odjąć cyfry w danej pozycji, trzeba „pożyczyć” 1 z kolejnej pozycji. W systemie szesnastkowym pożyczone 1 ma wartość 16, a nie 10.

Przykład 1: 10 hex – 1

Liczba 10 hex oznacza 16 dziesiętnie.

16 – 1 = 15

15 dziesiętnie to F.

Wynik:

10 hex – 1 = F hex

Przykład 2: 20 hex – 1

  20
- 01
----
1F

Wyjaśnienie:

  • w pozycji jedności mamy 0, więc pożyczamy 1 z pozycji szesnastek,
  • pożyczone 1 daje 16,
  • 16 – 1 = 15, czyli F,
  • z 2 pożyczono 1, więc zostaje 1.

Wynik:

20 hex – 1 = 1F hex

Dziesiętnie: 32 – 1 = 31.

Przykład 3: 3F – 15

  3F
- 15
----
2A

Wyjaśnienie:

  • F – 5 = A, bo 15 – 5 = 10,
  • 3 – 1 = 2.

Wynik:

3F – 15 = 2A hex

Sprawdzenie:

  • 3F = 63,
  • 15 hex = 21,
  • 63 – 21 = 42,
  • 42 = 2A.

Przykład 4: 100 – 1

  100
- 001
-----
FF

Wyjaśnienie:

  • 100 hex to 256 dziesiętnie,
  • 256 – 1 = 255,
  • 255 dziesiętnie to FF hex.

Wynik:

100 hex – 1 = FF hex

Mnożenie i dzielenie w systemie szesnastkowym

Mnożenie i dzielenie w systemie szesnastkowym można wykonywać bezpośrednio, ale w praktyce najczęściej korzysta się z konwersji lub z właściwości potęg liczby 16. W informatyce szczególnie ważne jest to, że przesunięcia pozycji w systemie szesnastkowym odpowiadają mnożeniu lub dzieleniu przez 16.

Mnożenie przez 16

W systemie dziesiętnym dopisanie zera z prawej strony oznacza mnożenie przez 10. W systemie szesnastkowym dopisanie zera oznacza mnożenie przez 16.

Przykłady:

  • A hex × 16 = A0 hex
  • 2F hex × 16 = 2F0 hex
  • 10 hex × 16 = 100 hex

Sprawdzenie:

  • A hex = 10 dec,
  • A0 hex = 160 dec,
  • 10 × 16 = 160.

Mnożenie przez potęgi 16

Dopisanie dwóch zer oznacza mnożenie przez 16², czyli 256.

Przykład:

AB hex × 256 = AB00 hex

Dopisanie trzech zer oznacza mnożenie przez 16³, czyli 4096.

Dzielenie przez 16

Dzielenie przez 16 w systemie szesnastkowym odpowiada przesunięciu liczby o jedną pozycję w prawo.

Przykłady:

  • A0 hex ÷ 16 = A hex
  • 2F0 hex ÷ 16 = 2F hex
  • 100 hex ÷ 16 = 10 hex

Jeśli liczba nie kończy się zerem, część odcięta z prawej strony jest resztą z dzielenia.

Przykład:

2A hex ÷ 16 = 2 reszty A

Dziesiętnie:

  • 2A hex = 42,
  • 42 ÷ 16 = 2 reszty 10,
  • 10 = A.

Zapis liczb szesnastkowych w programowaniu

W programowaniu trzeba jakoś odróżnić liczbę szesnastkową od dziesiętnej. Sama liczba 10 może oznaczać 10 dziesiętnie albo 16 dziesiętnie, jeśli jest zapisana w systemie szesnastkowym. Dlatego języki programowania używają specjalnych przedrostków lub oznaczeń.

Przedrostek 0x

Najczęściej spotykanym zapisem jest przedrostek:

0x

Przykłady:

  • 0x10 oznacza 16 dziesiętnie,
  • 0xFF oznacza 255 dziesiętnie,
  • 0x2A oznacza 42 dziesiętnie,
  • 0xBEEF oznacza 48879 dziesiętnie.

Taki zapis występuje między innymi w językach C, C++, JavaScript, Python, Java, Go, Rust i wielu innych.

Przykłady w kodzie

W języku C lub C++ można zapisać:

int liczba = 0xFF;

Oznacza to przypisanie wartości dziesiętnej 255.

W Pythonie:

liczba = 0x2A
print(liczba)

Program wypisze:

42

W JavaScript:

const kolor = 0xFF00AA;

Taki zapis może oznaczać wartość koloru lub liczbę całkowitą.

Inne oznaczenia liczb szesnastkowych

W różnych środowiskach można spotkać także inne notacje:

  • 0xFF – popularne w językach programowania,
  • FFh – spotykane w asemblerze i starszej dokumentacji,
  • $FF – spotykane w niektórych asemblerach i językach,
  • #FF00AA – zapis kolorów w HTML i CSS,
  • U+0041 – zapis punktów kodowych Unicode.

Ważne jest, aby zawsze rozumieć kontekst. Znak # w CSS oznacza kolor, ale w innym miejscu może oznaczać komentarz lub dyrektywę.

System szesnastkowy w kolorach HTML i CSS

Jednym z najbardziej znanych zastosowań systemu szesnastkowego jest zapis kolorów w grafice komputerowej, HTML i CSS. Kolory często zapisuje się w formacie:

#RRGGBB

gdzie:

  • RR oznacza składową czerwoną,
  • GG oznacza składową zieloną,
  • BB oznacza składową niebieską.

Każda składowa ma wartość od 00 do FF, czyli od 0 do 255 dziesiętnie.

Przykład koloru #FF0000

Kolor:

#FF0000

Składa się z:

  • RR = FF = 255,
  • GG = 00 = 0,
  • BB = 00 = 0.

Oznacza to maksymalną ilość czerwieni i brak zieleni oraz niebieskiego. Wynikowy kolor to czerwony.

Przykład koloru #00FF00

Kolor:

#00FF00

Składowe:

  • czerwony = 0,
  • zielony = 255,
  • niebieski = 0.

To kolor zielony.

Przykład koloru #0000FF

Kolor:

#0000FF

Składowe:

  • czerwony = 0,
  • zielony = 0,
  • niebieski = 255.

To kolor niebieski.

Przykład koloru #FFFFFF

Kolor:

#FFFFFF

Składowe:

  • czerwony = 255,
  • zielony = 255,
  • niebieski = 255.

To kolor biały.

Przykład koloru #000000

Kolor:

#000000

Składowe:

  • czerwony = 0,
  • zielony = 0,
  • niebieski = 0.

To kolor czarny.

Skrócony zapis kolorów hex

W CSS można czasem używać skróconego zapisu kolorów, na przykład:

#FFF

zamiast:

#FFFFFF

Skrócony zapis działa wtedy, gdy każda para znaków składa się z dwóch takich samych znaków.

Przykłady:

  • #FFF = #FFFFFF
  • #000 = #000000
  • #F00 = #FF0000
  • #0F0 = #00FF00
  • #00F = #0000FF
  • #ABC = #AABBCC

Kolory z kanałem alfa

W nowoczesnym CSS można spotkać także zapis:

#RRGGBBAA

gdzie AA oznacza kanał alfa, czyli przezroczystość.

Przykład:

#FF000080

Oznacza kolor czerwony z częściową przezroczystością. Wartość alfa również mieści się w zakresie od 00 do FF.

System szesnastkowy w pamięci komputera

Pamięć komputera jest zorganizowana w bajty. Każdy bajt można wygodnie zapisać za pomocą dwóch cyfr szesnastkowych. Dlatego programiści, inżynierowie i specjaliści od bezpieczeństwa bardzo często oglądają dane w postaci hex.

Bajt jako dwie cyfry hex

Jeden bajt może mieć wartość od:

00000000 bin

do:

11111111 bin

W systemie szesnastkowym jest to zakres:

00 hex

do:

FF hex

Czyli dziesiętnie:

0–255

To dlatego w edytorach hex pliki są przedstawiane jako ciągi wartości, na przykład:

48 65 6C 6C 6F

Ten ciąg bajtów może odpowiadać tekstowi „Hello” w kodowaniu ASCII.

Adresy pamięci

Adresy pamięci również często zapisuje się w systemie szesnastkowym. Przykładowy adres może wyglądać tak:

0x7FFE12A0

Taki zapis jest dużo bardziej czytelny niż długa liczba dziesiętna albo binarna. Ponieważ adresy pamięci są związane z bajtami, słowami maszynowymi i bitami, system szesnastkowy idealnie pasuje do ich reprezentacji.

Zrzuty pamięci

W debugowaniu i analizie programów często używa się zrzutów pamięci, w których dane są pokazane bajt po bajcie:

00000000: 48 65 6C 6C 6F 20 57 6F 72 6C 64 21

Po lewej stronie może znajdować się adres lub przesunięcie, a po prawej wartości bajtów w systemie szesnastkowym.

System szesnastkowy w elektronice cyfrowej

W elektronice cyfrowej system szesnastkowy jest bardzo wygodny, ponieważ układy cyfrowe operują na bitach, bajtach i rejestrach. Zapis hex pozwala szybko zrozumieć, które bity są ustawione.

Rejestry mikrokontrolerów

Mikrokontrolery mają rejestry sterujące, których bity odpowiadają za konkretne funkcje. Rejestr 8-bitowy można zapisać jako dwie cyfry szesnastkowe.

Przykład:

0x0F

Binarnie:

00001111

Oznacza to, że cztery najmłodsze bity są ustawione na 1, a cztery najstarsze na 0.

Inny przykład:

0xF0

Binarnie:

11110000

Oznacza to, że cztery najstarsze bity są ustawione na 1.

Maski bitowe

Maski bitowe bardzo często zapisuje się w systemie szesnastkowym.

Przykłady:

  • 0x01 = 00000001,
  • 0x02 = 00000010,
  • 0x04 = 00000100,
  • 0x08 = 00001000,
  • 0x10 = 00010000,
  • 0x20 = 00100000,
  • 0x40 = 01000000,
  • 0x80 = 10000000.

Każda z tych wartości ma ustawiony dokładnie jeden bit. Dzięki temu można łatwo włączać, wyłączać i sprawdzać pojedyncze bity.

Przykład maski bitowej

Jeśli mamy wartość:

0x2D

Binarnie:

00101101

Możemy zobaczyć, że ustawione są bity:

  • bit 0,
  • bit 2,
  • bit 3,
  • bit 5.

System szesnastkowy pozwala szybko zapisać i analizować takie wartości bez konieczności ciągłego używania długiego zapisu binarnego.

System szesnastkowy w adresach MAC, Unicode i kodowaniu danych

System szesnastkowy pojawia się w wielu standardach technicznych. Często tam, gdzie trzeba zapisać bajty, kody znaków, identyfikatory lub wartości binarne w czytelnej formie.

Adresy MAC

Adres MAC karty sieciowej zapisuje się zwykle jako sześć bajtów w systemie szesnastkowym, na przykład:

A4:5E:60:12:AB:9F

Każda para znaków oznacza jeden bajt. Łącznie adres MAC ma 48 bitów, czyli 6 bajtów.

Dlaczego adres MAC jest zapisany w hex?

Zapis binarny adresu MAC byłby bardzo długi i nieczytelny:

10100100 01011110 01100000 00010010 10101011 10011111

Zapis szesnastkowy:

A4:5E:60:12:AB:9F

jest znacznie bardziej przejrzysty.

Unicode

Unicode przypisuje znakom tak zwane punkty kodowe. Często zapisuje się je w systemie szesnastkowym z przedrostkiem U+.

Przykłady:

  • U+0041 oznacza literę A,
  • U+0030 oznacza cyfrę 0,
  • U+20AC oznacza znak euro,
  • U+1F600 oznacza emoji uśmiechniętej twarzy.

System szesnastkowy dobrze nadaje się do takiego zapisu, ponieważ punkty kodowe są liczbami, a ich binarna reprezentacja jest łatwiejsza do grupowania w formie hex.

Kodowanie URL

W adresach internetowych można spotkać zapis procentowy, w którym bajty są reprezentowane w systemie szesnastkowym.

Przykład:

%20

oznacza spację w kodowaniu URL.

Znak procentu informuje, że kolejne dwie cyfry są wartością bajtu w systemie szesnastkowym.

Pliki binarne

Pliki binarne, takie jak obrazy, programy wykonywalne, archiwa czy dokumenty, składają się z bajtów. Edytory hex pokazują te bajty w systemie szesnastkowym, co pozwala analizować strukturę pliku.

Przykład początku pliku PNG często zawiera bajty:

89 50 4E 47

To wartości szesnastkowe odpowiadające charakterystycznej sygnaturze formatu.

System szesnastkowy w cyberbezpieczeństwie

W cyberbezpieczeństwie system szesnastkowy jest używany bardzo często. Analiza ruchu sieciowego, malware, exploitów, plików binarnych, pamięci i kryptografii wymaga pracy z bajtami, a bajty najwygodniej zapisywać w hex.

Analiza pakietów sieciowych

Pakiety sieciowe składają się z pól binarnych. Narzędzia do analizy ruchu pokazują wiele wartości w systemie szesnastkowym, ponieważ pozwala to dokładnie odczytać zawartość nagłówków i danych.

Analiza malware

Specjaliści analizujący złośliwe oprogramowanie często przeglądają kod maszynowy, zrzuty pamięci i pliki wykonywalne w postaci szesnastkowej. Dzięki temu mogą zobaczyć bajty instrukcji, adresy, ciągi znaków i struktury danych.

Hash funkcje i kryptografia

Skróty kryptograficzne, takie jak MD5, SHA-1, SHA-256 czy SHA-512, często prezentuje się w systemie szesnastkowym.

Przykład skrótu SHA-256 ma zwykle 64 znaki hex, ponieważ reprezentuje 256 bitów:

256 bitów ÷ 4 bity na znak hex = 64 znaki hex

To kolejny przykład wygodnego związku między systemem binarnym a szesnastkowym.

System szesnastkowy w asemblerze i kodzie maszynowym

W programowaniu niskopoziomowym system szesnastkowy jest szczególnie ważny. Kod maszynowy składa się z bajtów, a asembler bardzo często używa zapisu hex do wartości stałych, adresów i instrukcji.

Kod maszynowy

Procesor wykonuje instrukcje zapisane jako sekwencje bajtów. Dla człowieka zapis binarny takich instrukcji byłby bardzo nieczytelny. Zapis hex pozwala analizować je znacznie wygodniej.

Przykład:

B8 01 00 00 00

Taki ciąg może oznaczać instrukcję procesora wraz z argumentem, zależnie od architektury.

Asembler

W asemblerze wartości szesnastkowe mogą być zapisywane różnie, zależnie od składni:

mov ax, 0FFFFh

albo:

mov eax, 0xFFFFFFFF

Zapis hex jest naturalny, ponieważ dobrze odpowiada długości rejestrów i bajtów.

Rejestry procesora

Rejestry procesora często prezentuje się w systemie szesnastkowym. Na przykład 32-bitowa wartość może wyglądać tak:

0xDEADBEEF

Taki zapis ma 8 cyfr hex, czyli 32 bity. Jest dużo wygodniejszy niż zapis binarny o długości 32 znaków.

System szesnastkowy a liczby ujemne

W komputerach liczby ujemne są często zapisywane w kodzie uzupełnień do dwóch. System szesnastkowy jest wygodny do prezentacji takiego zapisu, ale trzeba pamiętać, że sama wartość hex nie mówi jeszcze, czy liczba jest dodatnia, czy ujemna. To zależy od interpretacji.

Przykład 8-bitowy

Wartość:

0xFF

może oznaczać:

  • 255, jeśli interpretujemy ją jako liczbę 8-bitową bez znaku,
  • -1, jeśli interpretujemy ją jako liczbę 8-bitową ze znakiem w kodzie uzupełnień do dwóch.

Ta sama sekwencja bitów może mieć różne znaczenie zależnie od typu danych.

Zakres 8-bitowy

Dla 8 bitów:

  • bez znaku zakres wynosi od 0 do 255,
  • ze znakiem zakres zwykle wynosi od -128 do 127.

Wartość:

0x7F = 127

Wartość:

0x80 może oznaczać 128 bez znaku albo -128 ze znakiem.

Wartość:

0xFF może oznaczać 255 bez znaku albo -1 ze znakiem.

Przykład 16-bitowy

Wartość:

0xFFFF

może oznaczać:

  • 65535 bez znaku,
  • -1 jako liczba 16-bitowa ze znakiem.

Wartość:

0x8000

może oznaczać:

  • 32768 bez znaku,
  • -32768 ze znakiem.

Dlatego przy interpretacji danych komputerowych trzeba zawsze znać typ danych i liczbę bitów.

System szesnastkowy w praktyce programisty

Programista spotyka system szesnastkowy w wielu sytuacjach. Nawet jeśli pisze aplikacje wysokopoziomowe, zapis hex pojawia się w kolorach, identyfikatorach, logach, bajtach, kodowaniu znaków, debugowaniu i dokumentacji.

Stałe liczbowe

W kodzie często używa się wartości hex, gdy liczba reprezentuje strukturę bitową.

Przykłady:

#define FLAG_READ  0x01
#define FLAG_WRITE 0x02
#define FLAG_EXEC 0x04

Każda flaga odpowiada jednemu bitowi. Dzięki temu można je łączyć operacją OR.

Kolory

W aplikacjach webowych kolor może być zapisany jako:

color: #3366FF;

Programista od razu widzi składowe RGB:

  • 33,
  • 66,
  • FF.

Debugowanie

Podczas debugowania można zobaczyć wartości pamięci, wskaźników i rejestrów w systemie szesnastkowym. To standardowy sposób pracy z danymi niskopoziomowymi.

Protokoły komunikacyjne

W dokumentacji protokołów często podaje się bajty startowe, identyfikatory poleceń i sumy kontrolne w hex.

Przykład:

AA 55 01 00 FF

Taki zapis jest krótki, jednoznaczny i łatwo porównywalny z danymi odczytanymi z urządzenia.

System szesnastkowy w mikrokontrolerach

Mikrokontrolery, takie jak AVR, STM32, PIC, ESP32 czy układy ARM, bardzo często wykorzystują wartości szesnastkowe w dokumentacji i programowaniu.

Konfiguracja rejestrów

Rejestry mikrokontrolerów składają się z bitów. Każdy bit może włączać lub wyłączać konkretną funkcję. Zapis hex pozwala szybko ustawić kilka bitów jednocześnie.

Przykład:

0x0F = 00001111

Może oznaczać włączenie czterech młodszych bitów.

0x80 = 10000000

Może oznaczać ustawienie najstarszego bitu.

Porty wejścia-wyjścia

Jeżeli port mikrokontrolera ma 8 pinów, jego stan można zapisać jednym bajtem. Wartość:

0x55

binarnie:

01010101

oznacza naprzemienne ustawienie bitów.

Wartość:

0xAA

binarnie:

10101010

oznacza odwrotny wzorzec.

Takie wartości często pojawiają się w testach sprzętu i komunikacji.

Magistrale komunikacyjne

Dane przesyłane przez UART, SPI, I²C, CAN lub inne interfejsy często zapisuje się w postaci hex. Ułatwia to porównywanie ramek komunikacyjnych i analizę protokołów.

System szesnastkowy w grafice komputerowej

Poza kolorami HTML system szesnastkowy pojawia się także w grafice komputerowej, przetwarzaniu obrazów, buforach pikseli i formatach plików.

Piksele i kanały koloru

Piksel może być reprezentowany przez kilka bajtów. Na przykład w modelu RGB jeden piksel może mieć trzy bajty:

  • czerwony,
  • zielony,
  • niebieski.

Kolor czerwony może być zapisany jako:

FF 00 00

Kolor zielony:

00 FF 00

Kolor niebieski:

00 00 FF

Jeżeli dochodzi kanał alfa, piksel może mieć cztery bajty, na przykład:

FF 00 00 80

czyli czerwony z określoną przezroczystością.

Formaty plików graficznych

Pliki graficzne mają struktury binarne, nagłówki, bloki danych i metadane. Analiza hex pozwala rozpoznawać formaty plików i sprawdzać ich poprawność.

System szesnastkowy a kodowanie tekstu

Tekst w komputerze jest reprezentowany jako liczby. Każdy znak ma przypisany kod. System szesnastkowy jest wygodnym sposobem zapisywania tych kodów.

ASCII

W kodowaniu ASCII znak „A” ma wartość dziesiętną 65, czyli:

41 hex

Znak „a” ma wartość dziesiętną 97, czyli:

61 hex

Znak spacji ma wartość dziesiętną 32, czyli:

20 hex

Dlatego tekst „ABC” w ASCII można zapisać jako bajty:

41 42 43

Przykład tekstu w hex

Słowo:

Hello

w ASCII ma bajty:

48 65 6C 6C 6F

Każda para znaków hex odpowiada jednemu bajtowi, czyli jednemu znakowi w podstawowym ASCII.

UTF-8

W kodowaniu UTF-8 znaki mogą zajmować od jednego do kilku bajtów. System szesnastkowy jest często używany do prezentacji tych bajtów.

Na przykład polskie znaki, emoji i symbole specjalne mają wielobajtowe reprezentacje. W analizie kodowania zapis hex jest bardzo przydatny, ponieważ pokazuje dokładną sekwencję bajtów.

Najczęstsze błędy przy nauce systemu szesnastkowego

Nauka systemu szesnastkowego nie jest trudna, ale pewne błędy powtarzają się bardzo często. Warto je znać, aby szybciej opanować temat.

Błąd 1: traktowanie 10 hex jak 10 dziesiętnie

To najczęstszy błąd. W systemie szesnastkowym:

10 hex = 16 dec

Nie 10. Podobnie:

  • 20 hex = 32 dec,
  • 100 hex = 256 dec,
  • 1000 hex = 4096 dec.

Błąd 2: zapominanie, że A–F są cyframi

W zapisie hex litery A–F nie są tekstem, tylko cyframi. Oznaczają wartości:

  • A = 10,
  • B = 11,
  • C = 12,
  • D = 13,
  • E = 14,
  • F = 15.

Błąd 3: mylenie wartości dziesiętnej z zapisem hex

Liczba 255 dziesiętnie to FF hex. Ale zapis 255 w systemie szesnastkowym oznacza:

2 × 16² + 5 × 16 + 5 = 512 + 80 + 5 = 597 dec

Dlatego zawsze trzeba wiedzieć, w jakim systemie zapisano liczbę.

Błąd 4: pomijanie zer wiodących tam, gdzie są potrzebne

Matematycznie:

F = 0F = 00F

Ale w zapisie bajtów zera wiodące mają znaczenie dla czytelności i długości danych.

Przykład:

  • F może być pojedynczą cyfrą hex,
  • 0F jasno oznacza jeden bajt,
  • 000F może oznaczać wartość 16-bitową.

W informatyce długość zapisu często informuje o liczbie bitów.

Błąd 5: niegrupowanie bitów po cztery

Przy konwersji binarnie na hex trzeba grupować bity od prawej strony po cztery. Grupowanie od lewej bez uzupełnienia zerami może dać błędny wynik.

Przykład:

101010 bin

Poprawnie:

0010 1010 = 2A

Niepoprawne grupowanie może prowadzić do złej wartości.

Błąd 6: ignorowanie interpretacji liczby

Ta sama wartość hex może oznaczać różne rzeczy:

  • liczbę bez znaku,
  • liczbę ze znakiem,
  • kolor,
  • znak tekstowy,
  • adres pamięci,
  • instrukcję procesora,
  • dane zakodowane.

Wartość 0x41 może oznaczać 65 dziesiętnie, literę A w ASCII, część instrukcji albo bajt danych. Znaczenie zależy od kontekstu.

Jak szybko nauczyć się systemu szesnastkowego?

Najlepszym sposobem jest opanowanie tabeli od 0 do F oraz regularne ćwiczenie prostych konwersji. Po pewnym czasie system szesnastkowy staje się bardzo naturalny.

Najważniejsza tabela do zapamiętania

DziesiętnieBinarnieHex000000100011200102300113401004501015601106701117810008910019101010A111011B121100C131101D141110E151111F

Jeżeli zapamiętasz tę tabelę, konwersja między binarnym a szesnastkowym będzie bardzo szybka.

Ćwiczenia dla początkujących

Warto samodzielnie zamienić:

  • 15 dec na hex,
  • 16 dec na hex,
  • 31 dec na hex,
  • 32 dec na hex,
  • 255 dec na hex,
  • 256 dec na hex,
  • 101010 bin na hex,
  • 11111111 bin na hex,
  • 0x2A na dec,
  • 0xFF na dec.

Odpowiedzi:

  • 15 dec = F hex,
  • 16 dec = 10 hex,
  • 31 dec = 1F hex,
  • 32 dec = 20 hex,
  • 255 dec = FF hex,
  • 256 dec = 100 hex,
  • 101010 bin = 2A hex,
  • 11111111 bin = FF hex,
  • 0x2A = 42 dec,
  • 0xFF = 255 dec.

Praktyczna tabela popularnych wartości hex

HexDziesiętnieBinarnie0x000000000000x011000000010x022000000100x044000001000x088000010000x0F15000011110x1016000100000x1F31000111110x2032001000000x7F127011111110x80128100000000xFF255111111110x1002561 000000000xFFFF655351111111111111111

System szesnastkowy a system ósemkowy

System szesnastkowy nie jest jedynym systemem używanym w informatyce. Dawniej popularny był również system ósemkowy, czyli system o podstawie 8. Używa cyfr od 0 do 7.

Różnica między hex a oct

System ósemkowy grupuje bity po trzy, ponieważ:

2³ = 8

System szesnastkowy grupuje bity po cztery, ponieważ:

2⁴ = 16

Współczesne komputery często operują na bajtach, czyli grupach po 8 bitów. Ponieważ 8 bitów idealnie dzieli się na dwie grupy po 4 bity, system szesnastkowy jest zwykle wygodniejszy od ósemkowego.

Przykład porównania

Liczba binarna:

11111111

W systemie szesnastkowym:

FF

W systemie ósemkowym:

377

Oba zapisy są krótsze od binarnego, ale hex lepiej pasuje do bajtów.

System szesnastkowy w matematyce komputerowej

W matematyce komputerowej system szesnastkowy jest używany nie tylko do zapisu liczb całkowitych, ale także do reprezentacji struktur bitowych, masek, wartości zmiennoprzecinkowych i danych pamięciowych.

Liczby zmiennoprzecinkowe

Wartości typu float i double są przechowywane w pamięci jako określone układy bitów. Ich reprezentacja może być pokazana w systemie szesnastkowym.

Na przykład 32-bitowa liczba zmiennoprzecinkowa składa się z:

  • bitu znaku,
  • wykładnika,
  • mantysy.

Zapis hex pozwala zobaczyć dokładny układ bitów, choć sama interpretacja wymaga znajomości standardu zapisu liczb zmiennoprzecinkowych.

Endianness

System szesnastkowy pomaga również analizować kolejność bajtów w pamięci, czyli tak zwany endianness.

Przykład wartości 32-bitowej:

0x12345678

W pamięci może być zapisana jako:

  • 12 34 56 78 w porządku big-endian,
  • 78 56 34 12 w porządku little-endian.

To ważne przy analizie plików binarnych, protokołów, mikrokontrolerów i komunikacji między systemami.

System szesnastkowy w bazach danych i identyfikatorach

Zapis hex jest często używany w bazach danych, identyfikatorach i reprezentacji danych binarnych.

UUID

Identyfikatory UUID zapisuje się za pomocą znaków szesnastkowych i myślników, na przykład:

550e8400-e29b-41d4-a716-446655440000

Taki identyfikator reprezentuje 128-bitową wartość. Zapis szesnastkowy pozwala przedstawić ją w stosunkowo czytelnej formie.

Dane binarne w bazach danych

Bazy danych mogą przechowywać dane binarne, takie jak skróty haseł, klucze, pliki, tokeny lub identyfikatory. Często prezentują je jako ciągi hex, ponieważ jest to bezpieczniejsze i bardziej czytelne niż próba wyświetlania surowych bajtów jako tekstu.

Tokeny i klucze

Tokeny API, klucze kryptograficzne i identyfikatory sesji często są generowane jako losowe bajty, a następnie zapisywane w systemie szesnastkowym. Dzięki temu można je łatwo kopiować, przechowywać i przesyłać jako tekst.

System szesnastkowy a adresy IP

Adresy IPv4 zwykle zapisuje się dziesiętnie z kropkami, na przykład:

192.168.1.1

Jednak każdy człon adresu IPv4 to bajt, czyli wartość od 0 do 255. Można więc zapisać go również w hex:

  • 192 = C0,
  • 168 = A8,
  • 1 = 01,
  • 1 = 01.

Adres można przedstawić jako:

C0 A8 01 01

W praktyce przy konfiguracji sieci używa się zwykle zapisu dziesiętnego, ale w analizie pakietów i danych binarnych zapis hex pojawia się bardzo często.

IPv6

Adresy IPv6 są standardowo zapisywane w systemie szesnastkowym. Przykład:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

Adres IPv6 składa się z ośmiu grup po 16 bitów. Każda grupa jest zapisywana jako cztery cyfry szesnastkowe.

To bardzo dobry przykład praktycznego zastosowania systemu szesnastkowego w sieciach komputerowych.

System szesnastkowy w dokumentacji technicznej

Dokumentacja układów scalonych, mikrokontrolerów, procesorów i protokołów komunikacyjnych bardzo często używa systemu szesnastkowego.

Mapy rejestrów

Adresy rejestrów są często zapisane jako hex, na przykład:

  • 0x00,
  • 0x04,
  • 0x10,
  • 0xFF.

Dzięki temu łatwo widać wyrównanie, zakresy i strukturę przestrzeni adresowej.

Wartości konfiguracyjne

Dokumentacja może podawać, że aby włączyć określoną funkcję, należy zapisać do rejestru wartość:

0x80

albo:

0x1C

Programista może od razu zamienić ją na bity i sprawdzić, które opcje są ustawione.

Kody błędów

Kody błędów również bywają zapisywane w hex, na przykład:

0x80070005

Takie wartości są łatwiejsze do porównywania i identyfikowania w dokumentacji systemowej.

System szesnastkowy a kompresja zapisu

Jednym z powodów popularności systemu szesnastkowego jest kompaktowość. Liczby binarne mogą być bardzo długie, natomiast zapis hex skraca je czterokrotnie.

Przykład skrócenia zapisu

Liczba binarna 32-bitowa:

11011110101011011011111011101111

Po podziale na grupy:

1101 1110 1010 1101 1011 1110 1110 1111

Zapis hex:

DEADBEEF

Zamiast 32 znaków mamy 8 znaków. To ogromna różnica przy analizie danych.

Czytelność wzorców bitowych

System szesnastkowy pozwala szybciej rozpoznawać wzorce:

  • 0x00 – wszystkie bity wyzerowane w bajcie,
  • 0xFF – wszystkie bity ustawione w bajcie,
  • 0xAA – wzorzec 10101010,
  • 0x55 – wzorzec 01010101,
  • 0x0F – młodsze 4 bity ustawione,
  • 0xF0 – starsze 4 bity ustawione.

Takie wzorce są powszechne w testowaniu pamięci, komunikacji i elektronice cyfrowej.

System szesnastkowy w praktycznych zadaniach

Aby dobrze opanować system szesnastkowy, warto przeanalizować kilka praktycznych problemów.

Zadanie 1: zamiana 0x7B na system dziesiętny

Liczba:

7B

B = 11.

Obliczenie:

7 × 16 + 11 = 112 + 11 = 123

Wynik:

0x7B = 123 dec

Zadanie 2: zamiana 200 dec na hex

Dzielimy:

200 ÷ 16 = 12 reszty 8

12 to C.

12 ÷ 16 = 0 reszty 12

Odczyt od końca:

C8

Wynik:

200 dec = C8 hex

Zadanie 3: zamiana 10111100 bin na hex

Dzielimy na grupy:

1011 1100

Zamiana:

  • 1011 = B,
  • 1100 = C.

Wynik:

10111100 bin = BC hex

Zadanie 4: zamiana 0x3C na binarny

Zamieniamy:

  • 3 = 0011,
  • C = 1100.

Wynik:

0x3C = 00111100 bin

Zadanie 5: kolor #3366CC

Kolor:

#3366CC

Składowe:

  • czerwony: 0x33 = 51,
  • zielony: 0x66 = 102,
  • niebieski: 0xCC = 204.

To kolor z przewagą niebieskiego.

System szesnastkowy w porównaniu z codziennym liczeniem

Dla człowieka system dziesiętny jest naturalny, ale dla techniki cyfrowej system szesnastkowy jest praktyczniejszy. Nie oznacza to, że komputery „myślą” w systemie szesnastkowym. Komputery operują na bitach. System szesnastkowy jest przede wszystkim wygodnym zapisem dla ludzi, którzy chcą analizować dane binarne.

Dlaczego nie używamy samego systemu binarnego?

System binarny jest bezpośredni, ale mało czytelny. Liczba 255 jako:

11111111

jest jeszcze zrozumiała, ale liczby 32-bitowe, 64-bitowe czy większe stają się trudne do czytania. Zapis hex skraca je i zachowuje łatwą konwersję do bitów.

Dlaczego nie używamy tylko systemu dziesiętnego?

System dziesiętny dobrze nadaje się do obliczeń codziennych, ale gorzej pokazuje strukturę bitową. Liczba 255 w dziesiętnym nie zdradza od razu, że w jednym bajcie wszystkie bity są ustawione. Zapis 0xFF natychmiast to sugeruje osobie znającej hex.

Podobnie:

  • 0xF0 pokazuje ustawione starsze 4 bity,
  • 0x0F pokazuje ustawione młodsze 4 bity,
  • 0x80 pokazuje najstarszy bit w bajcie,
  • 0x01 pokazuje najmłodszy bit.

Najważniejsze korzyści z używania systemu szesnastkowego

System szesnastkowy jest popularny, ponieważ łączy kompaktowość z bliskim związkiem z systemem binarnym.

Najważniejsze zalety to:

  • krótszy zapis niż binarny,
  • łatwa konwersja do i z systemu binarnego,
  • wygodny zapis bajtów,
  • czytelne przedstawianie adresów pamięci,
  • dobre dopasowanie do rejestrów i masek bitowych,
  • standardowy zapis kolorów w HTML i CSS,
  • użyteczność w debugowaniu,
  • powszechność w programowaniu i dokumentacji technicznej.

Kiedy system szesnastkowy jest najbardziej przydatny?

Najbardziej przydaje się wtedy, gdy liczba reprezentuje nie tyle zwykłą wartość do liczenia, ile układ bitów.

Przykłady:

  • adres pamięci,
  • bajt danych,
  • kolor RGB,
  • maska bitowa,
  • kod znaku,
  • identyfikator sprzętowy,
  • instrukcja procesora,
  • skrót kryptograficzny,
  • wartość rejestru,
  • ramka protokołu komunikacyjnego.

W takich sytuacjach zapis hex jest zwykle bardziej naturalny niż zapis dziesiętny.

Jak rozpoznawać liczby szesnastkowe?

Liczby szesnastkowe często mają charakterystyczne oznaczenia.

Można je rozpoznać po:

  • przedrostku 0x, na przykład 0xFF,
  • literach A–F w liczbie, na przykład 2A,
  • sufiksie h, na przykład 0FFh,
  • znaku # w kolorach, na przykład #FF00AA,
  • zapisie U+ w Unicode, na przykład U+0041,
  • parach znaków oddzielonych dwukropkami w adresach MAC,
  • grupach czterech znaków w adresach IPv6.

Trzeba jednak uważać: liczba bez liter, na przykład 10, może być niejednoznaczna. Bez kontekstu nie wiadomo, czy oznacza 10 dziesiętnie, czy 16 dziesiętnie w zapisie hex.

System szesnastkowy w edukacji informatycznej

System szesnastkowy pojawia się w nauce informatyki, ponieważ pomaga zrozumieć, jak komputer reprezentuje dane. Jest pomostem między abstrakcyjnymi liczbami a rzeczywistymi bitami w pamięci.

Co warto opanować na początku?

Na początku warto nauczyć się:

  • symboli 0–F,
  • wartości A–F,
  • konwersji binarnie ↔ hex,
  • konwersji hex ↔ dziesiętnie,
  • znaczenia bajtu jako dwóch cyfr hex,
  • zapisu 0x,
  • podstaw kolorów #RRGGBB,
  • odczytywania masek bitowych.

Dopiero później warto przechodzić do liczb ze znakiem, adresowania pamięci, endianness i analizy plików binarnych.

Dlaczego system szesnastkowy ułatwia naukę binarnego?

Zamiast analizować osiem, szesnaście lub trzydzieści dwa bity naraz, można grupować je po cztery. To zmniejsza obciążenie pamięci i ułatwia zauważanie wzorców. Uczeń szybciej widzi, że:

  • F to 1111,
  • 0 to 0000,
  • A to 1010,
  • 5 to 0101,
  • C to 1100,
  • 3 to 0011.

To bardzo pomaga przy zrozumieniu masek bitowych i operacji logicznych.

Operacje bitowe a system szesnastkowy

Programiści często używają operacji bitowych: AND, OR, XOR, NOT oraz przesunięć bitowych. System szesnastkowy ułatwia zapis wartości używanych w tych operacjach.

Operacja AND

Operacja AND zostawia bit ustawiony tylko wtedy, gdy oba porównywane bity są równe 1.

Przykład:

0xF0 AND 0x0F

Binarnie:

11110000
00001111
--------
00000000

Wynik:

0x00

Operacja OR

Operacja OR ustawia bit, jeśli przynajmniej jeden z porównywanych bitów jest równy 1.

Przykład:

0xF0 OR 0x0F

11110000
00001111
--------
11111111

Wynik:

0xFF

Operacja XOR

Operacja XOR ustawia bit, jeśli porównywane bity są różne.

Przykład:

0xAA XOR 0xFF

10101010
11111111
--------
01010101

Wynik:

0x55

Przesunięcia bitowe

Przesunięcie o 4 bity w lewo odpowiada mnożeniu przez 16, czyli przesunięciu o jedną cyfrę hex.

Przykład:

0x0A << 4 = 0xA0

Przesunięcie o 8 bitów odpowiada przesunięciu o dwie cyfry hex.

Przykład:

0x12 << 8 = 0x1200

To kolejny powód, dla którego system szesnastkowy jest tak wygodny w programowaniu niskopoziomowym.

System szesnastkowy w analizie błędów

W komunikatach błędów, logach systemowych i diagnostyce sprzętowej często pojawiają się kody szesnastkowe. Mogą one oznaczać status, adres, identyfikator błędu lub konkretną wartość bitową.

Kody statusu

Kod:

0x00000000

często oznacza sukces lub brak błędu, choć zależy to od systemu.

Kod:

0xFFFFFFFF

może oznaczać wartość specjalną, błąd, -1 albo wszystkie bity ustawione.

Diagnostyka sprzętu

Urządzenia embedded mogą zwracać kody odpowiedzi, na przykład:

  • 0x00 – OK,
  • 0x01 – błąd parametru,
  • 0x02 – brak dostępu,
  • 0x80 – błąd krytyczny.

Znaczenie zależy od dokumentacji, ale zapis hex jest wygodny, bo często każdy bit kodu ma określoną funkcję.

FAQ – najczęściej zadawane pytania

Co to jest system szesnastkowy?

System szesnastkowy to system liczbowy o podstawie 16. Używa cyfr od 0 do 9 oraz liter A, B, C, D, E i F, które oznaczają wartości od 10 do 15.

Jakie cyfry występują w systemie szesnastkowym?

W systemie szesnastkowym występują symbole:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Litera A oznacza 10, B oznacza 11, C oznacza 12, D oznacza 13, E oznacza 14, a F oznacza 15.

Ile wynosi 10 w systemie szesnastkowym?

10 w systemie szesnastkowym wynosi 16 w systemie dziesiętnym. To dlatego, że pierwsza pozycja oznacza jedności, a druga pozycja oznacza szesnastki.

Ile wynosi FF w systemie dziesiętnym?

FF hex = 255 dec.

Obliczenie:

15 × 16 + 15 = 240 + 15 = 255

Ile wynosi 2A w systemie dziesiętnym?

2A hex = 42 dec.

Obliczenie:

2 × 16 + 10 = 32 + 10 = 42

Dlaczego w systemie szesnastkowym używa się liter?

Ponieważ system szesnastkowy potrzebuje 16 symboli, a cyfry dziesiętne dają tylko 10 symboli. Brakujące wartości od 10 do 15 zapisuje się literami A–F.

Do czego służy system szesnastkowy?

System szesnastkowy służy do wygodnego zapisu danych binarnych. Jest używany w programowaniu, adresowaniu pamięci, kolorach HTML i CSS, elektronice cyfrowej, adresach MAC, IPv6, Unicode, kryptografii, debugowaniu i analizie plików.

Dlaczego system szesnastkowy jest ważny w informatyce?

Jest ważny, ponieważ jeden znak hex odpowiada dokładnie czterem bitom. Dzięki temu długie ciągi binarne można zapisywać znacznie krócej i czytelniej.

Ile bitów ma jedna cyfra szesnastkowa?

Jedna cyfra szesnastkowa odpowiada 4 bitom.

Ile cyfr szesnastkowych ma jeden bajt?

Jeden bajt ma 8 bitów, więc zapisuje się go za pomocą 2 cyfr szesnastkowych.

Jak zamienić liczbę binarną na szesnastkową?

Należy podzielić liczbę binarną na grupy po 4 bity od prawej strony, a następnie każdą grupę zamienić na jedną cyfrę hex.

Jak zamienić liczbę szesnastkową na binarną?

Każdą cyfrę hex należy zamienić na 4 bity. Na przykład:

A = 1010

F = 1111

Dlatego:

AF hex = 10101111 bin

Co oznacza przedrostek 0x?

Przedrostek 0x oznacza, że liczba jest zapisana w systemie szesnastkowym. Na przykład 0xFF oznacza 255 dziesiętnie.

Co oznacza kolor #FF0000?

Kolor #FF0000 oznacza czerwony. W zapisie RGB składowa czerwona ma wartość FF, czyli 255, a zielona i niebieska mają wartość 00.

Co oznacza #FFFFFF?

#FFFFFF oznacza kolor biały, ponieważ wszystkie trzy składowe RGB mają maksymalną wartość 255.

Co oznacza #000000?

#000000 oznacza kolor czarny, ponieważ wszystkie trzy składowe RGB mają wartość 0.

Czy wielkość liter w hex ma znaczenie?

Zwykle nie. Zapis AF, af i Af oznacza tę samą wartość. Wielkie litery są często stosowane dla czytelności.

Czy system szesnastkowy jest trudny?

Nie, jeśli zrozumie się podstawę 16 i zapamięta wartości A–F. Najłatwiej uczyć się go przez konwersję między systemem binarnym a szesnastkowym.

Jak policzyć 255 w systemie szesnastkowym?

255 dziesiętnie to FF w systemie szesnastkowym, ponieważ jeden bajt o wszystkich bitach ustawionych ma zapis binarny 11111111, a to odpowiada FF.

Co oznacza 0x00?

0x00 oznacza bajt o wartości 0. Binarnie jest to 00000000.

Co oznacza 0xFF?

0xFF oznacza bajt o wartości 255 bez znaku. Binarnie jest to 11111111.

Co oznacza 0x80?

0x80 oznacza wartość 128 bez znaku. Binarnie jest to 10000000, czyli ustawiony najstarszy bit w bajcie.

Czy system szesnastkowy jest używany przez komputer?

Komputer fizycznie operuje na bitach, czyli systemie binarnym. System szesnastkowy jest używany głównie przez ludzi jako wygodny sposób zapisu danych binarnych.

Co oznacza U+0041?

U+0041 to zapis punktu kodowego Unicode w systemie szesnastkowym. Oznacza wielką literę A.

Dlaczego adresy MAC zapisuje się szesnastkowo?

Adres MAC ma 48 bitów, czyli 6 bajtów. Zapis szesnastkowy pozwala przedstawić każdy bajt jako dwie cyfry, na przykład A4:5E:60:12:AB:9F.

Dlaczego IPv6 używa systemu szesnastkowego?

Adres IPv6 ma 128 bitów. Zapis dziesiętny lub binarny byłby zbyt długi. System szesnastkowy pozwala zapisać adres jako osiem grup po cztery cyfry hex.

Jak szybko przeliczać hex na binarny?

Najlepiej zapamiętać tabelę od 0 do F. Każdą cyfrę hex zamienia się na dokładnie cztery bity. Na przykład:

  • F = 1111,
  • A = 1010,
  • 5 = 0101,
  • 0 = 0000.

Jak szybko przeliczać binarny na hex?

Podziel bity od prawej strony na grupy po cztery i każdą grupę zamień na cyfrę hex. Na przykład:

11110000 = F0

Czym różni się system szesnastkowy od dziesiętnego?

System dziesiętny ma podstawę 10 i używa cyfr 0–9. System szesnastkowy ma podstawę 16 i używa cyfr 0–9 oraz liter A–F.

Czym różni się system szesnastkowy od binarnego?

System binarny ma podstawę 2 i używa tylko 0 oraz 1. System szesnastkowy ma podstawę 16 i jest krótszym sposobem zapisu danych binarnych.

Czy 100 hex to 100 dziesiętnie?

Nie. 100 hex = 256 dec, ponieważ:

1 × 16² + 0 × 16 + 0 = 256

Czy system szesnastkowy przydaje się w CSS?

Tak. W CSS system szesnastkowy jest powszechnie używany do zapisu kolorów, na przykład #FF0000, #00FF00, #3366CC.

Czy system szesnastkowy przydaje się w programowaniu?

Tak. Jest bardzo przydatny w pracy z bitami, bajtami, pamięcią, kolorami, maskami bitowymi, identyfikatorami, kodowaniem znaków, kryptografią i debugowaniem.