Zapis liczby ze znakiem
Kod uzupełnieniowy
Binarny zapis liczby całkowitej, w którym najstarszy bit jest
bitem znaku, a pozostałe to bity modułu, oznaczające liczbę.
Moduł jest zawsze zapisany w naturalnym kodzie binarnym.
np. 11010101110110
bit znaku bity modułu
Kod znak-moduł (ZM)
jeśli bit znaku ma wartość 0, liczba jest nieujemna, jeśli ma 1, jest niedodatnia
dwie reprezentacje 0
zakres dla 1 bajta: od -127 do 127
w działaniach uczestniczą tylko moduły liczb
liczba nie jest jednorodna
obliczanie wartości:
LZM = (-1)bit znaku × moduł liczbynp. 0011(ZM) = 3(10) przeliczenie: (-1)0 x (21 + 20)
1101(ZM) = -5(10) przeliczenie: (-1)1 x (22 + 20)
Przeliczanie liczb dziesiętnych na liczby
ZM
Wyznaczyć bity modułu wartości bezwzględnej liczby (bez
minusa)
9(10) = 1001(2)
Uzupełnić bitami o wartości 0, by uzyskać o jeden bit mniej niż długość formatu
0001001
Jako najstarszy wpisać bit znaku: 0 dla liczby dodatniej lub 1 dla liczby ujemnej
9(10) = 00001001(ZM)
Kod uzupełnień do jedności (U1)
jeśli bit znaku ma wartość 0, liczba jest nieujemna, jeśli ma 1, jest niedodatnia
dwie reprezentacje 0
zakres dla 1 bajta: od -127 do 127
wartości dodatnie oblicza się tak, jak w naturalnym kodzie binarnym
liczba przeciwna powstaje przez negację wszystkich bitów
obliczanie wartości ujemnych (n - ilość bitów w liczbie):
LU1 = (-2n-1+1) + moduł liczbynp. 0101(U1) = 5(10 ) przeliczenie: 22 + 20
1001(U1) = -6(10) przeliczenie: (-23+ 1) + 20
Przeliczanie dodatnich liczb dziesiętnych
na liczby U1
Wyznaczyć bity w systemie binarnym
76(10) = 1001100(2)
Uzupełnić bitami o wartości 0 do długości formatu
76(10) = 01001100(U1)
Przeliczanie ujemnych liczb dziesiętnych
na liczby U1
Wyznaczyć bity modułu wartości bezwzględnej liczby (bez
minusa)
113(10) = 1110001(2)
Uzupełnić bitami o wartości 0 do długości formatu
01110001
Zanegować wszystkie bity (nadać im wartości przeciwne)
-113(10) = NOT 01110001 = 10001110(U1)
Przeliczanie ujemnych liczb dziesiętnych
na liczby U1 - sposób 2.
Wyznaczyć wartość 2n - 1 + liczba
28 - 1 + (-113) = 256 - 1 - 113 = 142
Otrzymaną wartość zakodować w naturalnym systemie
binarnym
142(10) = 10001110(2)
(-113)(10) = 10001110(U1)
Kod uzupełnień do dwóch (U2)
najczęściej używany - działania wykonywane jak na zwykłych liczbach binarnych
jeśli bit znaku ma wartość 0, liczba jest dodatnia lub równa 0, jeśli ma 1, jest ujemna
jedna reprezentacja 0, zawsze o jedną więcej liczb ujemnych niż dodatnich
zakres dla 1 bajta: od -128 do 127
wartości dodatnie oblicza się tak, jak w naturalnym kodzie binarnym
obliczanie wartości ujemnych (n - ilość bitów w liczbie):
LU2 = (-2n-1) + moduł liczbynp. 0011(U2) = 4(10 ) przeliczenie: 21 + 20
1011(U2) = -5(10 ) przeliczenie: (-23) + 21 + 20
Wyznaczanie liczby przeciwnej w kodzie
U2
Zanegować wszystkie bity w zapisie U2
NOT 01101110= 10010001
Do wyniku dodać 1
10010001 + 00000001 = 10010010
Wyznaczanie liczby przeciwnej w kodzie
U2 - sposób 2.
Przejść do najmłodszego bitu liczby
0010010000
Do wyniku przepisać kolejne bity 0, aż do napotkania bitu
1, który też przepisać
0010010000 Wynik: 10000
Wszystkie pozostałe bity zanegować i przepisać
Wynik: 1101110000
Przeliczanie dodatnich liczb dziesiętnych
na liczby U2
Wyznaczyć bity w systemie binarnym
76(10) = 1001100(2)
Uzupełnić bitami o wartości 0 do długości formatu
76(10) = 01001100(U2)
Przeliczanie ujemnych liczb dziesiętnych
na liczby U2
Wyznaczyć wartość 2n-1 + liczba
27 + (-45) = 128 - 45 = 83(10) = 1010011(2)
W razie potrzeby uzupełnić zerami, dodać bit znakowy 1
11010011(U2)
Przeliczanie ujemnych liczb dziesiętnych
na liczby U2 - sposób 2.
Wyznaczyć zapis binarny liczby przeciwnej (dodatniej)
45(10) = 101101(2)
Uzupełnić bitami 0 do długości formatu
00101101
Wyznaczyć liczbę przeciwną
(-45)(10) = 11010011(U2)
Przeliczanie ujemnych liczb dziesiętnych
na liczby U2 - sposób 3.
Do liczby 2n dodać przeliczaną liczbę dziesiętną
28 + (-45) = 256 - 45 = 211
Zamienić otrzymaną liczbę na postać binarną
211 = 11010011(2)
(-45)(10) = 11010011(U2)