Dlaczego właściwie używamy zapisu szesnastkowego?

Cześć!

Mam na imię Wojtek i jestem inżynierem od testowania Systemów Wbudowanych.

Właśnie trwa przedsprzeaż mojego kursu Wszystko o magistrali CAN – polecam!

Wprowadzenie

Być może spotkałeś się z liczbami, które są zapisywane z dziwnymi literami, a czasami również poprzedzone zerem i “iksem” na początku, takie jak 0x23DA.

Dlaczego ktoś wydziwia i zapisuje liczby w taki sposób? Jak zapisać liczbę w systemie szesnastkowym?

Notacja szesnastkowa

Wprowadzenie

Zapis szesnastkowy (inaczej notacja szesnastkowa) jest systemem liczbowym, w którym używa się 16 symboli zamiast dziesięciu, jak w przypadku systemu dziesiętnego. Symbole te to cyfry od 0 do 9 oraz litery A, B, C, D, E i F, które reprezentują kolejno wartości 10, 11, 12, 13, 14 i 15

123456789101112131415(16)
123456789ABCDEF(10)

Wartości od 0 do 15 można zapisać za pomocą dokładnie 4 bitów. Jak wiadomo jeden bajt ma ich 8, więc zapis szesnatkowy wydaje się idealny do zapisania wartości bajtu za pomocą zaledwie dwóch znaków:

Wartość bajtu zapis szesnastkowy nibble półbajt

Każda z połówek bajtów nazywana jest nibblem. Istnieją również polskie określenia na połowę bajtu: półbajt oraz tetrada, jednak przed napisaniem tego artykułu nigdy wcześniej o nich nie słyszałem 😉

zapis szesnastkowy

No dobrze, ale po co?

Jak wiadomo, nadając fizycznie jakąś wartość mamy do dyspozycji tylko zera i jedynki

1 – jest napięcie / wysoki stan napięcia (lub też płynie prąd)

0 – brak napięcia / niski stan napięcia

Załóżmy, że otrzymaliśmy taką wartość liczbową, zapisaną binarnie:

zapis binarny

 Przetłumaczmy ją teraz na dwa rodzaje notacji: szesnastkową i dziesiętną:

Zapis szesnastkowy i zapis dziesiętny

Na razie nie widać wielkiej różnicy.

Ale uwaga, teraz dostaliśmy na magistrali następną wartość, która różni się jedynie jednym bitem od poprzedniej:

zapis binarny
W miejscu zera pojawiła się teraz jedynka

Spójrzmy jak wygląda nowa liczba w notacjach szesnatkowej i dziesiętnej:

Zapis dziesiętny a zapis szesnastkowy

W zapisie szesnastkowym zmienił się tylko jeden znak – jest to logiczne, ponieważ zmiana nastąpiła tylko w jednym nibblu, a każdy nibble zapisywany jest jednym znakiem.

A co się stało z liczbą dziesiętną? Ma zupełnie inną długość i zupełnie inną wartość!

Jeden bit wystarczył, aby zupełnie zmienić liczbę w zapisie dziesiętnym.

Wizualizacja

Kolejną istotną rzeczą jest wizualizacja.

Jeśli weźmiemy liczbę:

0x18 00 00 FF FF

Już na pierwszy rzut oka widać, że dwa ostatnie bajty wypełnione są samymi jedynkami, a trzeci i czwarty bajt wypełnione są zerami.

Ta sama liczba zapisana w systemie dziesiętnym da nam wartość:

103 079 280 639

Nie dając nam żadnej wskazówki co do tego jaką wartość mogą mieć poszczególne bajty składowe.

Podsumowanie

Zalety systemu szesnastkowego:

  • Powiązanie naturalnej reprezentacji binarnej z liczbą – dwa znaki na jeden bajt
  • Niewielkie zmiany liczby Hex przy niewielkich zmianach binarnych
  • Krótsza liczba
  • Na pierwszy rzut oka widać jakie są wartości binarne

Opublikowano

w

przez

Tagi:

Komentarze

5 odpowiedzi na „Dlaczego właściwie używamy zapisu szesnastkowego?”

  1. Awatar Maski i przesunięcia bitowe – co to za czary? – Systemy Wbudowane

    […] liczby. Musimy więc dokonać jeszcze przesunięcia bitowego w prawą stronę, pamiętając że każdy znak szesnastkowy to 4 bity. Chcąc pozbyć się sześciu zer z prawej strony, przesuwamy liczbę o 4*6 = 24 […]

  2. Awatar Slawomir
    Slawomir

    Cześć, nie powinno być w zdaniu zamiana bitu -> bajtu?:
    “do zapisania wartości bitu za pomocą zaledwie dwóch znaków”

    1. Awatar admin

      Cześć,

      Dzięki, za kolejne wyłapanie błędu 🙂

  3. Awatar Slawomir
    Slawomir

    Hej, chiałem jeszcze omówić pierwszą tabele. Moim zdaniem masz dobrze opisane:
    “Symbole te to liczby od 0 do 9 oraz litery A, B, C, D, E i F” Więc tabela jest błedna moim zdaniem.
    Tabela powinna zaczynać sie od: 0|0 …. a kończuyć na 15|F.
    No bo rezpezentacja 16|10 moim zdaniem jest nieprawidłowa. Dodatkowo musimy pokazać 0 w zapisie szesznastkowym chociązby zeby wpisać do Bajtu wartoś 0x10. Dodatkowo maksymalne wypełnienie 4 bitów (1111) = 15. Więc wartości w zapisie szesznastkowym to od 0 – 15 (co daje 16 znaków liczac od 0). Masz nawet to napisane:
    “Wartości od 0 do 15 można zapisać za pomocą dokładnie 4 bitów.”

    1. Awatar admin

      Cześć, rozumiem Twój punkt widzenia, ale celowo w pierwszej tabeli jest zestawienie 16 z 0x10, aby pokazać co się dzieje dalej po 0xF. Tabela obrazuje wprowadzenie do systemu szesnastkowego z pierwszego akapitu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *