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).

  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!

  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)SM2EL = (-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.

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ę!