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
- Czym jest system szesnastkowy?
- Dlaczego system szesnastkowy ma podstawę 16?
- Cyfry i symbole w systemie szesnastkowym
- System szesnastkowy jako system pozycyjny
- System szesnastkowy a system dziesiętny
- System szesnastkowy a system binarny
- Jak zamienić liczbę szesnastkową na dziesiętną?
- Jak zamienić liczbę dziesiętną na szesnastkową?
- Jak zamienić liczbę binarną na szesnastkową?
- Jak zamienić liczbę szesnastkową na binarną?
- Dodawanie w systemie szesnastkowym
- Odejmowanie w systemie szesnastkowym
- Mnożenie i dzielenie w systemie szesnastkowym
- Zapis liczb szesnastkowych w programowaniu
- System szesnastkowy w kolorach HTML i CSS
- System szesnastkowy w pamięci komputera
- System szesnastkowy w elektronice cyfrowej
- System szesnastkowy w adresach MAC, Unicode i kodowaniu danych
- Najczęstsze błędy przy nauce systemu szesnastkowego
- 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:
- Zapisz wartość każdej cyfry.
- Przypisz pozycjom kolejne potęgi liczby 16 od prawej strony.
- Pomnóż każdą cyfrę przez jej wagę.
- 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:
- Podziel liczbę przez 16.
- Zapisz resztę z dzielenia.
- Wynik całkowity ponownie podziel przez 16.
- Powtarzaj, aż wynik całkowity będzie równy 0.
- Odczytaj reszty od ostatniej do pierwszej.
- 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:
- Podziel liczbę binarną na grupy po 4 bity od prawej strony.
- Jeśli po lewej stronie brakuje bitów do pełnej grupy, dopisz zera.
- Każdą grupę zamień na odpowiadającą cyfrę szesnastkową.
- 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:
- Weź każdą cyfrę szesnastkową osobno.
- Zamień ją na czterobitową reprezentację binarną.
- Połącz wszystkie grupy.
- 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.