Łapka LogoŁapka Infa
🌐
Algorytmy

Systemy Liczbowe: Znak-Moduł, U2 i IEEE 754

Zrozum jak komputer widzi ułamki i liczby ujemne. Absolutny klasyk z arkuszy maturalnych CKE.

Reprezentacja Liczb w Komputerze (Systemy Liczbowe)

Na maturze z informatyki CKE uwielbia sprawdzać, czy rozumiesz, jak maszyna, która zna tylko 0 i 1, potrafi zapisać liczbę -5 albo 3.14. Wymaga to znajomości kodów reprezentacji.

1. Kod Znak-Moduł (ZM)

Najprostszy sposób zapisu liczb ujemnych. Pierwszy, skrajnie lewy bit (najbardziej znaczący - MSB) zostaje "poświęcony" i pełni rolę znaku:

  • 0 oznacza liczbę dodatnią.
  • 1 oznacza liczbę ujemną. Reszta bitów (moduł) to zwykła wartość liczby.

Przykład dla 8 bitów: Liczba +5 (dziesiętnie) to binarnie 00000101. Liczba -5 w kodzie ZM to po prostu zamiana pierwszego bitu: 10000101.

Pułapka i wada ZM: Ten system pozwala na zapisanie "Plus Zera" (00000000) oraz "Minus Zera" (10000000). Komputer gubi się w matematyce przez dwa zera, dlatego powstał U2!

2. Kod Uzupełnień do Dwóch (U2) - Pewniak Maturalny! 🪤

To domyślny sposób zapisu liczb całkowitych w procesorach (np. typ int w C++). Aby zamienić dodatnią liczbę dziesiętną na jej ujemny odpowiednik w U2, stosujemy prosty algorytm dwukrokowy:

Zadanie: Zapisz -5 w 8-bitowym systemie U2.

  • Krok 0: Zapisz normalne, dodatnie +5: 00000101.
  • Krok 1 (Negacja / U1): Odwróć wszystkie bity (zera na jedynki, jedynki na zera): 11111010.
  • Krok 2 (+1): Do wyniku z kroku pierwszego dodaj 1: 11111010 + 1 = 11111011.
  • Wynik: -5 w U2 to 11111011.

Jak to odczytać z powrotem na dziesiętny? Pierwszy bit po lewej stronie ma w U2 wartość ujemną (w systemie 8-bitowym pierwsza waga to -128, a nie 128). 11111011 = (-128) + 64 + 32 + 16 + 8 + 0 + 2 + 1 = -5. Genialne, prawda? Zniknął problem podwójnego zera!

3. Standard IEEE 754 (Liczby Zmiennoprzecinkowe)

Zapisywanie ułamków (np. 5.75). Standard ten przypomina notację naukową (np. 1.5 * 10^3). W najpopularniejszej wersji (32-bitowej, zwanej Single Precision / float), liczba składa się z trzech części (od lewej do prawej):

  1. Bit znaku (1 bit): 0 dla dodatnich, 1 dla ujemnych.
  2. Cechy / Wykładnika (8 bitów): Do prawdziwego wykładnika dodaje się tzw. przesunięcie (Bias = 127).
  3. Mantysy (23 bity): Znacząca część ułamkowa. Komputer zawsze zakłada, że z przodu znajduje się "ukryte" 1., by oszczędzić jeden bit pamięci!

Uwaga maturalna: Precyzja ułamków w komputerze jest skończona. Liczby takie jak 0.1 w systemie binarnym są ułamkami okresowymi (niekończącymi się). Dlatego 0.1 + 0.2 w Pythonie daje wynik 0.30000000000000004! Zawsze miej to na uwadze przy zadaniach ze sprawdzaniem warunków.