Wróć do: Teoria
zaawansowany systemy liczbowekod U2liczby ujemnematura rozszerzona z informatyki

Liczby ujemne w kodzie U2

Kod uzupełnień do dwóch – jak zapisać liczbę ujemną w bajcie, dlaczego zero jest tylko jedno i skąd bierze się zakres od -128 do 127.

01

Opis

Komputer nie ma osobnego miejsca na znak minus – ma tylko bity. Trzeba więc umówić się, jak zapisywać liczby ujemne. Powszechnie stosowany jest kod uzupełnień do dwóch, w skrócie U2.

W U2 najstarszy bit pełni rolę znaku: 0 oznacza liczbę nieujemną, 1 oznacza ujemną. Ale to nie jest zwykłe „doklejenie minusa" – reszta bitów też się zmienia. Żeby zapisać liczbę ujemną, bierzemy zapis liczby dodatniej, odwracamy wszystkie bity i dodajemy 1.

Ta konwencja ma dużą zaletę: dodawanie działa bez żadnych wyjątków. Procesor dodaje liczby ujemne tą samą operacją co dodatnie i wynik wychodzi poprawny, więc odejmowanie w ogóle nie musi istnieć jako osobny układ.

02

Jak to działa

Zapisujemy -5 na ośmiu bitach:

  • 5 to 00000101
  • odwracamy wszystkie bity: 11111010
  • dodajemy 1: 11111011

Sprawdzenie przez dodawanie: 00000101 plus 11111011 daje 100000000. Dziewiąty bit wypada poza bajt, więc zostaje 00000000 – czyli zero. To potwierdza, że mamy liczbę przeciwną.

Ta sama procedura działa w drugą stronę: żeby odczytać wartość liczby ujemnej, odwróć bity, dodaj 1 i postaw minus.

Na maturze

U2 pojawia się w zadaniach o zakresie typów liczbowych i przy pytaniach o przepełnienie. Trzeba umieć podać zakres dla danej liczby bitów i wyjaśnić, dlaczego nie jest on symetryczny.

Na ośmiu bitach zakres wynosi od -128 do 127. Wartości ujemnych jest o jedną więcej, bo w U2 istnieje tylko jedno zero – nie ma osobnego „minus zera", które marnowałoby jedną kombinację.

04

Zapamiętaj

  • Liczbę ujemną tworzymy tak: odwróć wszystkie bity, potem dodaj 1.
  • Najstarszy bit ustawiony na 1 oznacza liczbę ujemną.
  • Na n bitach zakres to od minus 2 do potęgi n minus 1, do 2 do potęgi n minus 1, minus 1.
  • Na jednym bajcie: od -128 do 127, bo zero jest tylko jedno.
05

Najczęściej zadawane pytania

Dlaczego zakres nie jest symetryczny?

Bo zero zajmuje jedną z kombinacji „dodatnich". Zostaje ich więc 127, a ujemnych pełne 128. W kodach ze znakiem i modułem istnieje osobne minus zero i tam zakres jest symetryczny, ale marnuje się jedna wartość.

Co to jest przepełnienie w U2?

Sytuacja, w której wynik nie mieści się w zakresie – na przykład dodanie 100 do 100 na jednym bajcie. Wynik „zawija się" i wychodzi liczba ujemna, mimo że dodawaliśmy dwie dodatnie.

Jak szybko rozpoznać wartość liczby ujemnej?

Jeśli najstarszy bit to 1, odwróć wszystkie bity, dodaj 1 i odczytaj wynik jako zwykłą liczbę dodatnią – to jest moduł. Postaw przed nim minus.

Powiązane zagadnienia