System szesnastkowy (heksadecymalny) — definicja, zasady i zastosowania
System szesnastkowy (heksadecymalny) — definicja, zasady i zastosowania. Praktyczny przewodnik: konwersje, reprezentacja bitów, zastosowania w programowaniu i elektronice.
System liczb szesnastkowych, często nazywany też szesnastkowym (ang. hexadecimal, skrót: hex), jest systemem liczbowym składającym się z 16 symboli (podstawa 16). W standardowym systemie dziesiętnym (dziesiętnym) używamy dziesięciu znaków: 0–9. W systemie szesnastkowym oprócz cyfr 0–9 stosuje się jeszcze sześć liter alfabetu: alfabetu angielskiego, a konkretnie A, B, C, D, E i F, które odpowiadają wartościom dziesiętnym 10–15 (A = 10, B = 11, …, F = 15). Każda pozycja w zapisie szesnastkowym ma wagę będącą kolejną potęgą 16 (… , 16^2, 16^1, 16^0).
Dlaczego używa się systemu szesnastkowego? Ludzie najczęściej używają systemu dziesiętnego — prawdopodobnie dlatego, że mamy dziesięć palców. Komputery natomiast operują dwoma stanami: włączony/wyłączony, co daje system binarny (0 i 1). Ciągi bitów (np. 11011011) bywają długie, więc wygodnie jest je grupować. W przeszłości grupowano je po 3 bity (stąd powiązanie z ósemkowym systemem), ponieważ 3 bity reprezentują osiem stanów (0–7). Z czasem, przy rosnącej popularności architektur bazujących na bajtach i ich wielokrotnościach, wygodniej stało się grupować po 4 bity: 4 bity dają 16 różnych kombinacji, czyli dokładnie tyle, ile symboli ma system szesnastkowy.
W żargonie komputerowym cztery bity nazywane są nibble (czasem nybble). Jeden nibble odpowiada jednej cyfrze w systemie szesnastkowym (0–9, A–F). Dwie nibble tworzą bajt (8 bitów). Ponieważ wiele operacji komputerowych odbywa się na bajtach lub ich wielokrotnościach (16, 32, 64 bity itp.), zapis w systemie szesnastkowym znacznie upraszcza prezentację i analizę danych binarnych.
Przyporządkowanie i powiązanie z binarnym
- Każda cyfra szesnastkowa odpowiada dokładnie 4 bitom (np. 0 = 0000, 1 = 0001, …, F = 1111).
- Przykłady odwzorowania: 0x0 = 0000, 0x1 = 0001, 0x2 = 0010, 0x3 = 0011, 0x4 = 0100, 0x5 = 0101, 0x6 = 0110, 0x7 = 0111, 0x8 = 1000, 0x9 = 1001, 0xA = 1010, 0xB = 1011, 0xC = 1100, 0xD = 1101, 0xE = 1110, 0xF = 1111.
- Dzięki temu konwersja między binarnym a szesnastkowym polega na dzieleniu ciągu bitów na grupy po 4 od prawej strony i zamianie każdej grupy na odpowiadającą jej cyfrę hex.
Konwersje — przykłady i metody
Konwersja z systemu szesnastkowego na dziesiętny: należy rozwinąć liczbę jako sumę cyfr razy potęgi 16. Przykład: 3A716 = 3·16^2 + A·16^1 + 7·16^0 = 3·256 + 10·16 + 7 = 768 + 160 + 7 = 93510.
Konwersja z dziesiętnego na szesnastkowy: stosuje się dzielenie przez 16 i zapis reszt. Przykład: 202110:
- 2021 ÷ 16 = 126 reszty 5 → najmniej znacząca cyfra = 5
- 126 ÷ 16 = 7 reszty 14 → reszta 14 = E
- 7 ÷ 16 = 0 reszty 7 → kolejna cyfra = 7
Praktyczny przykład odczytu: zapis 63h lub 0x63 oznacza liczbę zapisaną w systemie szesnastkowym. 0x63 = 6·16 + 3 = 96 + 3 = 9910. W językach programowania najczęściej spotykane są przedrostki 0x (C, C++, Python, Java) lub przedrostek/sufiks zależny od środowiska (np. sufiks h w asemblerze). Wiele narzędzi akceptuje zarówno małe, jak i wielkie litery A–F (bez rozróżniania wielkości znaków).
Zastosowania praktyczne
- Adresowanie pamięci i debugowanie niskopoziomowe — adresy często zapisuje się w hex dla czytelności.
- Kolory w grafice i na stronach WWW — kody barw w formacie #RRGGBB są podawane w szesnastkowym (np. #FF0000 = czerwony).
- Reprezentacja danych binarnych — hex skraca zapis długich ciągów bitów (np. bajty logów, zrzuty pamięci).
- Protokóły sieciowe, sumy kontrolne, kryptografia — wartości i identyfikatory często prezentuje się w hex.
- Programowanie niskopoziomowe i asembler — instrukcje, maski bitowe i stałe często wyrażane w hex.
Uwagi praktyczne i konwencje
- Notacje: popularne konwencje zapisu to 0xA3, A3h (w niektórych asemblerach) oraz zapis bezpośredni (np. #A3) zależnie od środowiska.
- Jeśli zapis zaczyna się od litery (np. A3h), w niektórych dialektach asemblera trzeba poprzedzić go zerem (0A3h), żeby uniknąć pomyłek z identyfikatorami.
- Operacje arytmetyczne w hex działają tak samo jak w innych systemach pozycyjnych — dodajemy kolumny cyfr z przeniesieniem (carried) przy przekroczeniu 16.
- W większości narzędzi i języków programowania litery A–F są case-insensitive (A lub a = 10).
System szesnastkowy jest zatem narzędziem ułatwiającym pracę z danymi binarnymi: jest czytelniejszy dla ludzi niż długie ciągi zer i jedynek, a jednocześnie ma prostą, ścisłą relację z systemem binarnym dzięki grupowaniu po 4 bity.
Wartości szesnastkowe
System szesnastkowy jest podobny do systemu liczb ósemkowych (podstawa 8), ponieważ każdy z nich można łatwo porównać do systemu liczb binarnych. System szesnastkowy używa czterobitowego kodowania binarnego. Oznacza to, że każda cyfra w systemie szesnastkowym jest taka sama jak cztery cyfry w systemie binarnym. Octal używa trzy-bitowego systemu binarnego.
W systemie dziesiętnym, pierwsza cyfra to jedno miejsce, następna cyfra po lewej to miejsce dziesiętne, następna to miejsce setne, itd. W systemie szesnastkowym, każda cyfra może mieć 16 wartości, a nie 10. W systemie szesnastkowym każda cyfra może mieć 16 wartości, a nie 10. Oznacza to, że cyfry mają miejsce jeden, szesnaście, a następna jest miejscem 256. Tak więc 1h = 1 miejsce po przecinku, 10h = 16 miejsc po przecinku, a 100h = 256 w systemie dziesiętnym.
Przykładowe wartości liczb szesnastkowych przeliczone na dwu-, ósemkowe i dziesiętne.
|
Konwersja
Binarny do szesnastkowego
Zmiana liczby z binarnej na szesnastkową wykorzystuje metodę grupowania. Numer binarny jest podzielony na grupy składające się z czterech cyfr, zaczynając od prawej. Grupy te są następnie konwertowane na cyfry w systemie szesnastkowym, jak pokazano na powyższym wykresie dla liczb w systemie szesnastkowym od 0 do F. Aby zmienić z szesnastkowego na szesnastkowy, wykonuje się odwrotną zmianę. Cyfry szesnastkowe są zmieniane na binarne, a grupowanie jest zazwyczaj usuwane.
| Binarny | Ugrupowania | Hex | |||
| 01100101 | 0110 | 0101 | 65 | ||
| 010010110110 | 0100 | 1011 | 0110 | 4B6 | |
| 1101011101011010 | 1101 | 0111 | 0101 | 1010 | D75A |
Kiedy ilość bitów w liczbach binarnych nie jest wielokrotnością 4, jest ona wyściełana zerami, aby to zrobić. Przykłady:
- binarny 110 = 0110, co stanowi 6 Hex.
- binarny 010010 = 00010010, czyli 12 Hex.
Sześciokrotne do dziesiętnego
Aby przekonwertować liczbę z szesnastkowego na dziesiętny, istnieją dwa wspólne sposoby.
Pierwsza metoda jest częściej wykonywana przy konwersji ręcznej:
- Dla każdej cyfry szesnastkowej należy użyć wartości dziesiętnej. Dla 0-9 jest ona taka sama, ale A = 10, B = 11, C = 12, D = 13, E = 14 i F = 15.
- Zachowaj sumę liczb przeliczonych na każdym etapie poniżej.
- Zacznij od najmniej znaczącej cyfry szesnastkowej. To jest ta cyfra po prawej stronie. To będzie pierwsza pozycja w sumie.
- Weź drugą co do wielkości cyfrę. To jest obok cyfry po prawej stronie. Pomnóż wartość dziesiętną cyfry przez 16. Dodaj to do sumy.
- Zrób to samo dla trzeciej co do wielkości znaczącej cyfry, ale pomnóż ją przez 162 (to jest 16 kwadratów, czyli 256). Dodaj ją do sumy.
- Kontynuuj dla każdej cyfry, mnożąc każde miejsce przez kolejną potęgę 16. (4096, 65536, itd.)
|
| Lokalizacja | |||||
| 6 | 5 | 4 | 3 | 2 | 1 | |
| Wartość | 1048576 (165) | 65536 (164) | 4096 (163) | 256 (162) | 16(161) | 1 (160) |
Kolejna metoda jest częściej wykonywana przy konwersji numeru w oprogramowaniu. Nie musi wiedzieć, ile cyfr ma dana liczba przed jej rozpoczęciem i nigdy nie mnoży się jej przez więcej niż 16, ale na papierze wygląda na dłuższą.
- Dla każdej cyfry szesnastkowej należy użyć wartości dziesiętnej. Dla 0-9 jest ona taka sama, ale A = 10, B = 11, C = 12, D = 13, E = 14 i F = 15.
- Zachowaj sumę liczb przeliczonych na każdym etapie poniżej.
- Zacznij od najważniejszej cyfry (cyfra po lewej stronie). Jest to pierwsza pozycja w sumie.
- Jeśli istnieje inna cyfra, należy pomnożyć sumę przez 16 i dodać wartość dziesiętną kolejnej cyfry.
- Powtarzaj powyższy krok, aż do momentu, gdy nie będzie więcej cyfr.
Przykład: 5Fh i 3425h z dokładnością do jednego miejsca po przecinku, metoda 1
|
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Przykład: 5Fh i 3425h z dokładnością do jednego miejsca po przecinku, metoda 2
|
|
|
|
| |||||||||||||||||||||||||||||||||||||||||
Powiązane strony
- Binarny system numeryczny
- System numeracji ośmiokątnej
- System cyfr dziesiętnych
Pytania i odpowiedzi
P: Co to jest system liczb szesnastkowych?
O: System liczbowy szesnastkowy to system liczbowy o podstawie 16, składający się z 16 symboli.
P: Jakich dziesięciu symboli używa się w systemie dziesiętnym (podstawa 10)?
O: Dziesięć symboli używanych w systemie dziesiętnym (baza 10) to 0,1,2,3,4,5,6,7,8 i 9.
P: Jakich sześciu dodatkowych symboli używa system szesnastkowy?
O: W systemie szesnastkowym używa się liter z alfabetu angielskiego - A, B, C, D, E i F.
P: Ile bitów zawiera jeden bajt w nowoczesnych komputerach?
O: W nowoczesnych komputerach każdy bajt zawiera zazwyczaj osiem bitów.
P: Jak inżynierowie i informatycy nazywają wartości czterobitowe?
O: Inżynierowie i informatycy określają wartości czterobitowe jako nibble (czasami pisane jako nybble).
P: Jak uniknąć pomyłki z innymi systemami numeracji przy zapisie liczb szesnastkowych?
O: Aby uniknąć pomyłek z innymi systemami numeracji przy zapisie liczb szesnastkowych, można dodać "h" po lub "0x" przed liczbą. Na przykład 63h lub 0x63 oznacza 63 w systemie szesnastkowym.
Przeszukaj encyklopedię