Przejdź do treści
TrudnyWaga: 2-5 pkt

Systemy liczbowe, Kod U2 i Zmiennoprzecinkowe

Zrozum, jak komputer naprawdę widzi liczby. Konwersje systemów, zapis liczb ujemnych w U2 oraz budowa liczb zmiennoprzecinkowych (znak, cecha, mantysa).

Konwersje między systemem dwójkowym, dziesiętnym i szesnastkowym pojawiają się w arkuszu razem z zapisem liczby ujemnej w U2 i pytaniem prawda/fałsz o dokładność liczb zmiennoprzecinkowych. Schemat jest co roku ten sam: dzielenie z resztą w jedną stronę, sumowanie wag w drugą, a przy U2 trzy ruchy — moduł, negacja bitów, dodanie jedynki. To zadania, które da się wytrenować do automatu.

  1. Konwersje systemów: Binarny, Decymalny, Hex

Procesory posługują się wyłącznie stanami napięcia (jest prąd / nie ma prądu), dlatego absolutną podstawą informatyki jest system dwójkowy (binarny – zera i jedynki). System szesnastkowy (heksadecymalny, w którym używamy cyfr 0-9 i liter A-F) powstał z kolei tylko po to, by skrócić potężne ciągi binarne do formatu strawnego dla ludzkiego oka.

➡️ Dziesiętny na Bin/Hex

Stosujemy algorytm dzielenia całkowitego z resztą. Dzielimy liczbę przez podstawę (2 lub 16), spisujemy reszty, a następnie czytamy je od dołu do góry.

⬅️ Bin/Hex na Dziesiętny

Mnożymy cyfry przez wagi pozycji. Dla binarnego wagi (od prawej) to: 1, 2, 4, 8, 16... Wystarczy zsumować wagi tych pozycji, na których stoi 1!

⚡ Szybki przeskok

Każdą cyfrę szesnastkową można zapisać jako dokładnie 4 bity (tzw. tetradę). Np. F to 1111, a 5 to 0101. Zatem 0x5F to po prostu sklejone 01011111!

  1. Liczby ujemne: Magia kodu U2

Jak zapisać minus w pamięci RAM, skoro istnieją tam tylko zera i jedynki? Twórcy komputerów wymyślili, by zarezerwować najstarszy bit (ten najbardziej po lewej) jako bit znaku.

Jeśli najstarszy bit wynosi 0, liczba jest dodatnia. Jeśli 1, jest ujemna. Standardem maturalnym używanym we wszystkich komputerach świata jest kod U2 (Uzupełnień do dwóch). Pozwala on procesorowi dodawać liczby dodatnie i ujemne używając tego samego układu elektronicznego!

Zadanie

Algorytm w praktyce:

Zapisz liczbę dziesiętną −5-5 wykorzystując 8-bitowy system uzupełnień do dwóch (U2).

💡 Pokaż rozwiązanie krok po kroku▼
  • 1

    Krok 1: Moduł liczby (Wersja dodatnia)

    Zaczynamy od zapisania liczby 5 w klasycznym systemie binarnym na 8 bitach. Pamiętamy o uzupełnieniu zerami z lewej strony.


    0000 0101
  • 2

    Krok 2: Negacja bitowa (Kod U1)

    Odwracamy wszystkie bity na przeciwne – zera stają się jedynkami, a jedynki zerami. Tak otrzymujemy kod U1.


    1111 1010
  • 3

    Krok 3: Dodanie jedynki (Kod U2)

    Do otrzymanego wyniku po prostu dodajemy 1. Wynikowa wartość to nasza szukana liczba ujemna. Zauważ, że najstarszy bit to teraz 1!

      1111 1010

    •        1
      -----------
        1111 1011   ⬅️ To jest -5 w kodzie U2!
Odczyt w drugą stronę, zakres i przepełnienie

Żeby odczytać liczbę zapisaną w U2, nie trzeba cofać całej procedury. Wystarczy pamiętać, że najstarszy bit ma wagę ujemną: dla 1111 1011 liczymy −128+64+32+16+8+2+1=−5-128 + 64 + 32 + 16 + 8 + 2 + 1 = -5.

Zakres na nn bitach to ⟨−2n−1, 2n−1−1⟩\langle -2^{n-1},\ 2^{n-1}-1 \rangle, czyli na ośmiu bitach od −128-128 do 127127. Jest niesymetryczny, bo U2 — w odróżnieniu od znaku-modułu — ma tylko jedno zero. To najczęstsze pytanie testowe z tego działu.

Dodanie 1 do 0111 1111 (127) daje 1000 0000, czyli −128-128. To przepełnienie: wynik nie zmieścił się w zadeklarowanej liczbie bitów i zawinął na drugi koniec zakresu. Objaw w programie: licznik nagle staje się ujemny.

  1. Arytmetyka binarna i przesunięcia bitowe

Dodawanie w słupku działa jak w dziesiętnym, tylko przeniesienie następuje już przy 1+11 + 1. Odejmowanie łatwiej wykonać przez dodanie liczby przeciwnej w U2 — to zresztą dokładnie to, co robi procesor.

  1111        <- przeniesienia          10 - 5 jako 10 + (-5) w U2:
 1011  (11)                             0000 1010   (10)
+ 0101   (5)                           + 1111 1011   (-5)
-------                                -----------
10000  (16)                         (1)0000 0101   (5)
                                       ^ bit poza zakresem - odrzucamy
  • Przesunięcie w lewo o jeden bit (<<) to mnożenie przez 2: 0000 0101 (5) → 0000 1010 (10).
  • Przesunięcie w prawo (>>) to dzielenie całkowite przez 2, z odrzuceniem reszty.
  • Ostatni bit rozstrzyga o parzystości — dlatego n mod 2 to w praktyce odczytanie jednego bitu.
  • Ta sama zasada działa w systemie szesnastkowym: przesunięcie o jedną cyfrę to mnożenie lub dzielenie przez 16.

  1. Ułamki i notacja zmiennoprzecinkowa (IEEE 754)

Zapisanie ułamka 0.15 jest dla maszyny znacznie trudniejsze niż zapis liczby całkowitej. Służy do tego notacja zmiennoprzecinkowa, opisana uniwersalnym wzorem:

L=(−1)S⋅M⋅2EL = (-1)^S \cdot M \cdot 2^E

Zapis takiej liczby składa się z 3 nierozerwalnych, połączonych ze sobą bloków:

Znak (SS - Sign)
Dokładnie jeden bit informujący o tym, czy ułamek jest dodatni (0) czy ujemny (1).
Cecha (EE - Exponent / Wykładnik)
Określa, o ile miejsc "przesunięto" przecinek. Na maturze bywa zapisywana w kodzie z nadmiarem (tzw. przesunięciem / bias). Pozwala to uniknąć ujemnych wartości przy przesuwaniu przecinka w lewo.
Mantysa (MM - Mantissa / Ułamek)
Przechowuje właściwe bity "znaczące" liczby. Wartości są znormalizowane tak, by przecinek znajdował się od razu po pierwszej jedynce. Pozwala to na fizyczne pominięcie tej pierwszej jedynki w zapisie pamięci (tzw. ukryta jedynka), co daje komputerowi dodatkowy bit precyzji w prezencie!

  1. Maturalna pułapka: Błąd precyzji

Klasyczne pytanie Prawda/Fałsz z arkusza CKE:

"Czy każdą ułamkową liczbę dziesiętną da się precyzyjnie zapisać w systemie binarnym?"

Odpowiedź: FAŁSZ!

Tak jak w systemie dziesiętnym nie da się skończenie zapisać ułamka 1/31/3 (mamy 0.3333...0.3333...), tak system dwójkowy ma ten sam problem ze zwykłymi ułamkami jak 0.1 czy 0.2! Tworzą one rozwinięcia nieskończone okresowe w systemie binarnym. Ponieważ Mantysa ma ograniczoną pojemność (np. 23 bity), końcówka jest brutalnie ucinana. To dlatego w programowaniu np. w Pythonie działanie 0.1 + 0.2 często wyrzuci Ci wynik 0.30000000000000004.

  1. Szybkie metody i kontrola wyniku

Dzielenie przez 2 dziesięć razy pod presją czasu to prosta droga do pomyłki. Dwie sztuczki poniżej skracają tę pracę o połowę i dają gotowy sposób na sprawdzenie odpowiedzi.

Metoda odejmowania potęg

Zamiast dzielić, odejmuj największą mieszczącą się potęgę dwójki. Dla liczby 200: mieści się 128, zostaje 72; mieści się 64, zostaje 8; mieści się 8, zostaje 0. Zaznaczasz jedynki na pozycjach 128, 64 i 8, resztę uzupełniasz zerami — wychodzi 1100 1000. Warto mieć w pamięci ciąg potęg: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024.

Szesnastkowy przez binarny, nigdy przez dziesiętny

Przejście DEC → HEX policz jako DEC → BIN → HEX, grupując bity po cztery od prawej strony. Dla 200: 1100 1000 → C8. Jedna operacja zamiast dzielenia przez 16 z resztami, a przy okazji dostajesz obie odpowiedzi naraz, jeśli arkusz prosi o dwa zapisy.

Kontrola w pięć sekund. Liczba nieparzysta musi kończyć się jedynką, parzysta zerem. Liczba binarna o kk cyfrach mieści się w przedziale od 2k−12^{k-1} do 2k−12^k - 1 — jeśli twój wynik do niego nie pasuje, gdzieś zgubiłeś bit.
Uwaga na liczbę bitów. Jeśli polecenie mówi „zapisz na ośmiu bitach”, uzupełnij zera z lewej strony. Sam zapis 101 zamiast 0000 0101 bywa liczony jako odpowiedź niepełna.
Podstawa przy liczbie. W odpowiedzi zapisuj indeks systemu: 101121011_2, C816C8_{16}. Bez niego zapis 101 jest dwuznaczny.
Przeczytaj też
Najczęstsze błędy na maturze z informatyki

Lista pomyłek, które kosztują punkty mimo poprawnego rozumowania — i sposoby, żeby ich uniknąć.

Korepetycje z informatyki

Zdajesz maturę rozszerzoną z informatyki?

Prowadzimy indywidualne przygotowanie do matury z informatyki — algorytmy, Python i C++, bazy danych i arkusz kalkulacyjny. Zajęcia online, na arkuszach CKE. Zobacz program i cennik.

Zobacz korepetycje z informatyki

Uczysz się w technikum informatycznym? Prowadzimy też przygotowanie do kwalifikacji INF.02, INF.03 i INF.04. Zobacz egzaminy zawodowe →

Nadal czujesz się niepewnie?

To tylko jeden z pewniaków. Na kursie przechodzimy przez nie wszystkie, krok po kroku, aż poczujesz ten spokój.

Pomóżcie mi zdać maturę!