Szesnastkowy i spółka

🎯 Po co Ci to?

Otwórz w telefonie dowolny selektor kolorów: zobaczysz zapisy w rodzaju #FF7A00. Zajrzyj w ustawienia sieci: adres karty wygląda jak 3C:2E:F9:A1:07:BB. To nie szyfr — to system szesnastkowy, drugi język, którym informatycy zapisują bity. Nie dlatego, że lubią utrudniać: dlatego, że ciągi zer i jedynek są dla człowieka nieczytelne, a szesnastkowy pakuje dokładnie cztery bity w jeden znak. Po tej jednostce te napisy przestaną być szumem.

✅ Czego się nauczysz

Po tej jednostce potrafisz:

  • zapisywać i odczytywać liczby w systemie szesnastkowym (i dowolnym pozycyjnym);
  • tłumaczyć między systemem dwójkowym a szesnastkowym metodą grup czterobitowych;
  • odczytać zapis koloru RGB i wyjaśnić, co kodują jego części.

🔁 Przypomnij sobie

Z 2.1: system pozycyjny = cyfry × potęgi podstawy. Zmieniamy tylko podstawę — mechanika zostaje.

📘 Wyjaśnienie

W systemie o podstawie 16 potrzeba szesnastu cyfr. Dziesięć bierzemy z systemu dziesiętnego, a brakujące sześć... z alfabetu: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15. Pozycje mają wartości $16^0 = 1$, $16^1 = 16$, $16^2 = 256$, …

$$2F_{16} = 2 \cdot 16 + 15 = 47 \qquad FF_{16} = 15 \cdot 16 + 15 = 255$$

Zauważ: $FF_{16} = 255$ — dokładnie największa wartość bajta z jednostki 2.1. To nie przypadek, tylko powód istnienia tego systemu: jedna cyfra szesnastkowa to dokładnie cztery bity ($16 = 2^4$), więc bajt to zawsze dwie cyfry szesnastkowe. Ciąg $11010111_2$ zamieniasz tak: potnij na czwórki $1101,|,0111$, każdą czwórkę odczytaj osobno ($1101_2 = 13 = D$, $0111_2 = 7$) — wynik $D7_{16}$. W drugą stronę tak samo: każdą cyfrę rozpakuj do czterech bitów. Żadnego dzielenia, czysta mechanika.

💭 Pomyśl: Kolor w internecie zapisuje się jako #RRGGBB — trzy bajty: ile czerwieni, zieleni i niebieskiego (0–255, szesnastkowo 00–FF). Co oznaczają kolory #FF0000, #000000, #FFFFFF i #FF7A00?

Sprawdź odpowiedź

#FF0000 — maksimum czerwieni, zero reszty: czysta czerwień. #000000 — wszystkie składowe zgaszone: czerń. #FFFFFF — wszystkie na maksimum: biel. #FF7A00 — pełna czerwień, sporo zieleni ($7A_{16} = 122$), zero niebieskiego: pomarańczowy. Trzy bajty na piksel dają $256^3 = 16,777,216$ kolorów — dlatego w opisach ekranów przeczytasz „16,7 mln kolorów". Do pikseli wrócimy w jednostce 2.5.

A inne podstawy? Mechanika jest zawsze ta sama. System ósemkowy (podstawa 8, cyfry 0–7) pakuje po trzy bity i dziś spotyka się go rzadziej. Ważne jest co innego: zrozumienie, że podstawa to konwencja zapisu, nie własność liczby. Czterdzieści pięć to czterdzieści pięć — niezależnie, czy napiszesz $45_{10}$, $101101_2$ czy $2D_{16}$. Liczba jest jedna; stroje różne. (Poznajesz? W jednostce 1.3 to samo mówiliśmy o algorytmach.)

🐞 Znajdź błąd

Kolega tłumaczy $3B_{16}$ na system dziesiętny tak: „$3 \cdot 16 = 48$, plus $B$… B to chyba 12, czyli razem 60". Wskaż oba błędy — jeden rachunkowy, jeden metodyczny.

Sprawdź odpowiedź

Rachunkowy: $B = 11$, nie 12 (A=10, B=11, C=12 — łatwo się przesunąć o jeden). Poprawnie: $3 \cdot 16 + 11 = 59$. Metodyczny: „chyba" nie jest metodą — wartości cyfr A–F trzeba mieć wyryte albo wyprowadzić (A jest dziesiątą cyfrą, licząc od zera). Błędy o jeden to zawodowa zmora informatyki; jeszcze nie raz je spotkasz.

🤯 Ciekawostka

Stary żart branżowy: „programiści mylą Halloween z Bożym Narodzeniem, bo OCT 31 = DEC 25". OCT to skrót od października — i od systemu ósemkowego (octal); DEC to grudzień — i system dziesiętny (decimal). A $31_8 = 3 \cdot 8 + 1 = 25_{10}$. Jeśli ten żart Cię rozbawił — gratulacje, właśnie zdałeś egzamin z systemów pozycyjnych.

🛠️ Teraz Ty

Bez komputera: zapisz szesnastkowo swój wiek oraz liczbę 200; zamień $A5_{16}$ na system dwójkowy i dziesiętny. Z komputerem: w Pythonie hex(200) i int('A5', 16) sprawdzą Twoje wyniki, a w dowolnym selektorze kolorów obejrzyj, jak zmiana jednej cyfry w #FF7A00 zmienia barwę.

📐 Definicje tej lekcji

  • System szesnastkowy (heksadecymalny) — system pozycyjny o podstawie 16; cyfry 0–9 i A–F (10–15).
  • Reguła czwórek — jedna cyfra szesnastkowa ↔ dokładnie cztery bity; bajt ↔ dwie cyfry.

📌 Najważniejsze w pigułce

  • Szesnastkowy to skrócony zapis bitów dla ludzi: 8 bitów = 2 znaki.
  • Konwersja binarny ↔ szesnastkowy idzie grupami po cztery bity, bez liczenia.
  • Podstawa systemu to strój liczby, nie jej tożsamość.

🎒 Zadania

  1. Zamień: (a) $C8_{16}$ na dziesiętny, (b) 100 na szesnastkowy, (c) $10111110_2$ na szesnastkowy.
Wskazówka i odpowiedź

(a) $12 \cdot 16 + 8 = 200$. (b) $100 = 6 \cdot 16 + 4$ → $64_{16}$ (zabawne: „64" — kolejny powód, by dopisywać podstawę!). (c) czwórki: $1011,|,1110$ → $B$ i $E$ → $BE_{16}$.

  1. Który zapis koloru jest jaśniejszy: #808080 czy #C0C0C0? Odpowiedz bez zamiany na system dziesiętny, potem sprawdź rachunkiem.
Wskazówka i odpowiedź

Obie barwy to szarości (równe składowe). $C0 > 80$ na pierwszej cyfrze, więc #C0C0C0 ma wyższe wartości — jest jaśniejszy ($C0_{16}=192$ wobec $80_{16}=128$; skala 0 = czerń, 255 = biel). Porównywanie po pierwszej cyfrze działa w każdym systemie pozycyjnym — tak samo jak w dziesiętnym porównujesz 192 i 128 po setkach.

  1. Adres karty sieciowej ma postać sześciu bajtów, np. 3C:2E:F9:A1:07:BB. Ile bitów liczy taki adres i ile różnych adresów istnieje? (Wynik zostaw w postaci potęgi.)
Wskazówka i odpowiedź

6 bajtów × 8 bitów = 48 bitów, czyli $2^{48}$ adresów (≈ 281 bilionów). Dlatego każda karta sieciowa świata może mieć unikatowy adres „z fabryki" — do tej puli wrócimy w dziale o sieciach.

🔍 Sprawdź, czy umiesz

  • Odczytać #FFD700 i powiedzieć, jaka to mniej więcej barwa i dlaczego.
  • Przetłumaczyć bajt między zapisem binarnym a szesnastkowym w pamięci, grupami po cztery.
  • Wyjaśnić, dlaczego informatycy w ogóle używają systemu szesnastkowego.

Ucz się tej jednostki z asystentem