15
Zapis liczby ze znakiem

zapis ze znakiem

  • Upload
    mgasior

  • View
    202

  • Download
    0

Embed Size (px)

Citation preview

Page 1: zapis ze znakiem

Zapis liczby ze znakiem

Page 2: zapis 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

Page 3: zapis ze znakiem

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)

Page 4: zapis ze znakiem

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)

Page 5: zapis ze znakiem

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

Page 6: zapis ze znakiem

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)

Page 7: zapis ze znakiem

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)

Page 8: zapis ze znakiem

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)

Page 9: zapis ze znakiem

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

Page 10: zapis ze znakiem

Wyznaczanie liczby przeciwnej w kodzie

U2

Zanegować wszystkie bity w zapisie U2

NOT 01101110= 10010001

Do wyniku dodać 1

10010001 + 00000001 = 10010010

Page 11: zapis ze znakiem

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

Page 12: zapis ze znakiem

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)

Page 13: zapis ze znakiem

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)

Page 14: zapis ze znakiem

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)

Page 15: zapis ze znakiem

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)