SlideShare une entreprise Scribd logo
1  sur  15
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ł liczby
np.

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ł liczby
np.

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ł liczby
np.

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)

Contenu connexe

En vedette

En vedette (9)

Twitter
TwitterTwitter
Twitter
 
Daily class3
Daily     class3Daily     class3
Daily class3
 
Stradivarius
StradivariusStradivarius
Stradivarius
 
Relleu d’Espanya
Relleu d’EspanyaRelleu d’Espanya
Relleu d’Espanya
 
El sistema-solar
El sistema-solarEl sistema-solar
El sistema-solar
 
Visualforce Hack for Junction Objects
Visualforce Hack for Junction ObjectsVisualforce Hack for Junction Objects
Visualforce Hack for Junction Objects
 
Vigilance Quiz
Vigilance Quiz Vigilance Quiz
Vigilance Quiz
 
Vigilante the vigilance quiz
Vigilante the vigilance quizVigilante the vigilance quiz
Vigilante the vigilance quiz
 
Relleu d’Espanya
Relleu d’EspanyaRelleu d’Espanya
Relleu d’Espanya
 

zapis ze znakiem

  • 1. Zapis liczby ze znakiem
  • 2. 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
  • 3. 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ł liczby np. 0011(ZM) = 3(10) przeliczenie: (-1)0 x (21 + 20) 1101(ZM) = -5(10) przeliczenie: (-1)1 x (22 + 20)
  • 4. 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)
  • 5. 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ł liczby np. 0101(U1) = 5(10 ) przeliczenie: 22 + 20 1001(U1) = -6(10) przeliczenie: (-23+ 1) + 20
  • 6. 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)
  • 7. 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)
  • 8. 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)
  • 9. 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ł liczby np. 0011(U2) = 4(10 ) przeliczenie: 21 + 20 1011(U2) = -5(10 ) przeliczenie: (-23) + 21 + 20
  • 10. Wyznaczanie liczby przeciwnej w kodzie U2  Zanegować wszystkie bity w zapisie U2  NOT 01101110= 10010001  Do wyniku dodać 1  10010001 + 00000001 = 10010010
  • 11. 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
  • 12. 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)
  • 13. 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)
  • 14. 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)
  • 15. 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)