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,#FFFFFFi#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
- 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}$.
- Który zapis koloru jest jaśniejszy:
#808080czy#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.
- 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ć
#FFD700i 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.