System szesnastkowy w jednym zdaniu
System szesnastkowy to pozycyjny system liczbowy o podstawie 16: każda cyfra jest warta 16 razy więcej niż cyfra po jej prawej stronie, a wartości od 10 do 15 zapisuje się literami od A do F. Aby zaznaczyć, że liczba jest szesnastkowa, programiści piszą 0x1A (C, Java, JavaScript, Python), #1A2B3C w kolorach CSS, 1Ah w asemblerze lub 1A₁₆ w matematyce.
Tabela cyfr szesnastkowych od 0 do 15
| Dziesiętnie | Hex | Binarnie | Dziesiętnie | Hex | Binarnie |
|---|---|---|---|---|---|
| 0 | 0 | 0000 | 8 | 8 | 1000 |
| 1 | 1 | 0001 | 9 | 9 | 1001 |
| 2 | 2 | 0010 | 10 | A | 1010 |
| 3 | 3 | 0011 | 11 | B | 1011 |
| 4 | 4 | 0100 | 12 | C | 1100 |
| 5 | 5 | 0101 | 13 | D | 1101 |
| 6 | 6 | 0110 | 14 | E | 1110 |
| 7 | 7 | 0111 | 15 | F | 1111 |
Liczenie w systemie szesnastkowym
W hex liczy się tak jak w systemie dziesiętnym, ale przeniesienie następuje po F, a nie po 9: … 8, 9, A, B, C, D, E, F, 10, 11 … 19, 1A … 1F, 20 … FF, 100. Tutaj 10 oznacza szesnaście, a 100 – 16 × 16 = 256. Dwie cyfry hex obejmują jeden bajt (00–FF = 0–255), cztery cyfry sięgają do FFFF = 65 535, a osiem – do FFFFFFFF = 4 294 967 295.
Dlaczego komputery używają systemu szesnastkowego
Komputery przechowują wszystko w postaci binarnej, ale długie ciągi zer i jedynek trudno się czyta i łatwo w nich o pomyłkę. Ponieważ 16 = 2⁴, jedna cyfra hex odpowiada dokładnie czterem bitom (tetradzie, ang. nibble), a dwie cyfry hex – jednemu bajtowi. Zamiana między hex a systemem binarnym to proste podstawianie cyfra po cyfrze, a zapis hex jest czterokrotnie krótszy: 1101 1110 1010 1101 to po prostu DEAD. System dziesiętny nie ma tak prostej zależności z binarnym, dlatego rzadko używa się go do surowych danych.
Zamiana hex na dziesiętny i z powrotem
- Hex na dziesiętny: pomnóż każdą cyfrę przez odpowiednią potęgę 16 i dodaj wyniki:
2F= 2 × 16 + 15 = 47, a1A3F= 1 × 4096 + 10 × 256 + 3 × 16 + 15 = 6719. - Dziesiętny na hex: dziel wielokrotnie przez 16 i odczytaj reszty od końca: 200 ÷ 16 = 12 reszta 8, a 12 = C, więc 200 =
C8. - Hex na binarny: zastąp każdą cyfrę jej 4 bitami:
2F=0010 1111.
Nasze konwertery robią to wszystko natychmiast i pokazują każdy krok.
Gdzie używa się systemu szesnastkowego
- Kolory na stronach WWW:
#FF6347to czerwonyFF, zielony63i niebieski47. - Adresy pamięci: debugery i raporty awarii pokazują wskaźniki takie jak
0x7FFE5A3C. - Adresy MAC: sześć bajtów, np.
00:1A:2B:3C:4D:5E, identyfikuje kartę sieciową. - Adresy IPv6: osiem grup po cztery cyfry hex, np.
2001:db8::1. - Unicode: każdy znak ma szesnastkowy punkt kodowy –
U+00E9to é, aU+1F600to 😀. - Hashe i identyfikatory: hash SHA-256 ma 64 znaki hex, a UUID i identyfikatory commitów w Gicie zapisuje się w hex.
- Zrzuty hex: edytory hex pokazują zawartość plików bajt po bajcie; każdy PDF zaczyna się od
25 50 44 46(„%PDF”). - Kody błędów: Windows zgłasza błędy takie jak
0x80070005(odmowa dostępu).
System szesnastkowy, dziesiętny, ósemkowy i binarny – porównanie
| System | Podstawa | Cyfry | Zapis liczby 255 | Typowe zastosowanie |
|---|---|---|---|---|
| Binarny (dwójkowy) | 2 | 0–1 | 11111111 | Sprzęt, flagi bitowe |
| Ósemkowy | 8 | 0–7 | 377 | Uprawnienia plików w Uniksie (chmod 755) |
| Dziesiętny | 10 | 0–9 | 255 | Liczby na co dzień |
| Szesnastkowy | 16 | 0–9, A–F | FF | Bajty, kolory, adresy, hashe |
Liczby ujemne w systemie szesnastkowym
Sam zapis hex nie ma specjalnego znaku, dlatego liczby ujemne przechowuje się zwykle w kodzie U2 (uzupełnień do dwóch): najstarszy bit wartości o stałym rozmiarze oznacza, że liczba jest ujemna. Jako bajt ze znakiem 7F to 127, 80 to −128, a FF to −1; jako 32-bitowa liczba całkowita FFFFFFFF to −1. W matematyce i w naszym kalkulatorze możesz też po prostu napisać znak minus: −1A = −26.
Najczęściej zadawane pytania
Dlaczego w systemie szesnastkowym są litery?
Podstawa 16 wymaga szesnastu jednoznakowych cyfr, a cyfr arabskich jest tylko dziesięć. Litery A–F oznaczają wartości 10–15. Wielkie i małe litery znaczą to samo: ff = FF = 255.
Co oznacza 0x przed liczbą?
Oznacza liczbę szesnastkową w C, C++, Javie, JavaScripcie, Pythonie i wielu innych językach: 0x10 to 16, a nie dziesięć. W CSS kolory poprzedza się zamiast tego znakiem #, a w asemblerze często dodaje się na końcu h (10h).
Czy system szesnastkowy to to samo co Base64?
Nie. Hex zapisuje każdy bajt jako dwa znaki z zakresu 0–9 i A–F, więc dane zajmują dwa razy więcej miejsca, ale łatwo je czytać bajt po bajcie. Base64 używa 64 znaków i pakuje 3 bajty w 4 znaki, co jest bardziej zwarte (narzut ok. 33%), ale nieczytelne na poziomie pojedynczych bajtów.
Ostatnia aktualizacja: