24 kwietnia 2013 Wojciech Kucewicz 1 Cyfrowy zapis Cyfrowy zapis informacji informacji 24 kwietnia 2013 Wojciech Kucewicz 2 Bit, Bajt, Słowo Bit, Bajt, Słowo 24 kwietnia 2013 Wojciech Kucewicz 3 Cyfrowy zapis informacji Cyfrowy zapis informacji Bit [ang. binary digit] jest elementem zbioru dwuelementowego używanym do reprezentowania informacji. Bit może mieć wartość 1 lub 0. Bit 1001 1000 MSB bit najbardziej znaczący LSB bit najmniej znaczący 24 kwietnia 2013 Wojciech Kucewicz 4 Cyfrowy zapis informacji Cyfrowy zapis informacji 10011000 Byte Bajt (byte) ciąg złożony z 8 bitów. Bajt pozwala na zapisanie w systemie binarnym 28 liczb (0 -255) Ciąg 4 bitów nazywamy czasami nible (nibble). 24 kwietnia 2013 Wojciech Kucewicz 5 Cyfrowy zapis informacji Cyfrowy zapis informacji 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 Word Słowo (word) jest informacją złożoną z n bajtów. Słowo może zkładać się z 8, 16, 32 lub 64 bitów. Słowo jest traktowane przez układy komputera jako dane do wykonywanej aktualnie operacji, bądz jako zakodowany rozkaz. 24 kwietnia 2013 Wojciech Kucewicz 6 Cyfrowy zapis informacji Cyfrowy zapis informacji Rozmiar słowa Maksymalna liczba możliwa do zapisania 8 bits 255 16 bits 65535 32 bits 4 294 967 295 64 bits 18 446 744 073 709 551 615 24 kwietnia 2013 Wojciech Kucewicz 7 Cyfrowy zapis informacji Cyfrowy zapis informacji Kody liczbowe Kody liczbowe 24 kwietnia 2013 Wojciech Kucewicz 8 Kody liczbowe Kody liczbowe Najbardziej rozpowszechnionymi kodami liczbowymi są kody naturalne. Zapis liczb w kodzie naturalnym jest pozycyjny tj. każdy znak ai zajmuje ściśle określoną pozycję i, której przyporządkowana jest odpowiednia waga wi = pi, gdzie p jest podstawą kodu liczbowego. Podstawa kodu określa ilość znaków używanych w kodzie. 24 kwietnia 2013 Wojciech Kucewicz 9 Kod dziesiętny Kod dziesiętny Powszechnie stosowany jest kod (system) dziesiętny. Został opracowany w Indiach ok. V wieku i poprzez Arabów upowszechnił się w Europie. Oparty jest na dziesięciu znakach (cyfrach): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Ilość znaków jest podstawą systemu p = 10 Dowolną liczbę x przedstawia się za pomocą słowa A składającego się z n cyfr zgodnie ze wzorem: x = L(A) = aj & a4 a3 a2 a1 a0 ,a-1 a-2 gdzie a jest jednym z używanych znaków, a indeks j jest potęgą podstawy p przez którą znak jest mnożony. 24 kwietnia 2013 Wojciech Kucewicz 10 Kod dziesiętny Kod dziesiętny Liczba aj & a1 a0 , a-1 a-2 aj" pj + ...+ a1" 101 + a0" 100 + a-1" 10-1 + a-2" 10-2 Przykład: Liczbę 4321 można zapisać jako: 4321 = 4" 103 + 3" 102 + 2" 101 + 1" 100 = 4000 + 300 + 20 + 1 = 432110 Oznacza kod Przy pomocy n cyfr możemy zapisać pn liczb (od 0 do pn 1) 24 kwietnia 2013 Wojciech Kucewicz 11 Kod binarny Kod binarny W technice cyfrowej najczęściej jest stosowany kod dwójkowy (binarny) Oparty jest na dwóch znakach: 0, 1 Podstawa systemu p = 2 Przykład Liczbę 10000111000012 można zapisać jako 1" 212+ 0" 211+ 0" 210+ 0" 29+ 0" 28+ 1" 27+ 1" 26+ 1" 25 + 0" 24+ 0" 23+ 0" 22+ 0" 21+ 1" 20 = 4096+128+64+32+1 = 432110 24 kwietnia 2013 Wojciech Kucewicz 12 Kod oktagonalny Kod oktagonalny Kod oktagonalny oparty jest na ośmiu znakach: 0, 1, 2, 3, 4, 5, 6, 7 Podstawa systemu p = 8 Przykład Liczbę 103418 można zapisać jako 1" 84 + 0" 83 + 3" 82 + 4" 81 + 1" 80 = 4096+192+32+1= 432110 24 kwietnia 2013 Wojciech Kucewicz 13 Kod heksadecymalny Kod heksadecymalny Kod heksadecymalny oparty jest na szesnastu znakach: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Podstawa systemu p = 16 Przykład Liczbę 10EA16 można zapisać jako 1" 163 + 0" 162 + 14" 161 + 10" 160 = 4096+224+1= 432110 24 kwietnia 2013 Wojciech Kucewicz 14 Kody liczbowe Kody liczbowe Kod dziesiętny Kod binarny Kod octagonalny Kod heksadecymalny 00 0 0 11 1 1 210 2 2 311 3 3 4100 4 4 5101 5 5 6110 6 6 7 111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F 24 kwietnia 2013 Wojciech Kucewicz 15 Cyfrowy zapis informacji Cyfrowy zapis informacji Konwersja liczb między Konwersja liczb między różnymi kodami różnymi kodami 24 kwietnia 2013 Wojciech Kucewicz 16 Kod dziesiętny Ł kod binarny Kod dziesiętny Ł kod binarny Zamiana liczby całkowitej 5010 na binarną: Dzielenie przez Wynik dzielenia Reszta Liczba binarna podstawę 50/2 = 25 0 Ł a0 0 25/2 = 12 1 Ł a1 1 12/2 = 6 0 Ł a2 0 a3 6/2 = 3 0 Ł 0 a4 3/2 = 1 1 Ł 1 a5 1/2 = 0 1 Ł 1 5010 = 1100102 24 kwietnia 2013 Wojciech Kucewicz 17 Kod dziesiętny Ł kod binarny Kod dziesiętny Ł kod binarny Zamiana liczby ułamkowej 0,37510 na binarną : Mnożenie przez Wynik mnożenia Reszta Liczba binarna podstawę 0,375 " 2 = 0 0,75 Ł a-1 0 0,75 " 2 = 1 0,5 Ł a-2 1 0,5 " 2 = 1 0 Ł a-3 1 0,37510 = 0.0112 24 kwietnia 2013 Wojciech Kucewicz 18 Kod dziesiętny Ł kod binarny Kod dziesiętny Ł kod binarny Zamiana liczby dziesiętnej 50,37510 na binarną wykonuje się w dwóch krokach: 1) Konwersja części całkowitej 2) Konwersja części ułamkowej 50,37510 =50 + 0,375 = 110010 + 0,011 = 110010,0112 24 kwietnia 2013 Wojciech Kucewicz 19 Kod dziesiętny Ł kod binarny Kod dziesiętny Ł kod binarny Niektóre ułamki można tylko w przybliżeniu przedstawić w postaci binarnej np. 0,3: Mnożenie przez Wynik mnożenia Reszta Liczba binarna podstawę 0,3 " 2 = 0 0,6 Ł a-1 0 0,6 " 2 = 1 0,2 Ł a-2 1 0,2 " 2 = 0 0,4 Ł a-3 0 0,4 " 2 = 0 0,8 Ł a-4 0 a-5 0,8 " 2 = 1 0,6 Ł 1 a-6 0,6 " 2 = 1 0,2 Ł 1 0,310 = 0,010011& .2 24 kwietnia 2013 Wojciech Kucewicz 20 Kod binarny Ł kod oktagonalny Kod binarny Ł kod oktagonalny Liczbę binarną należy podzielić na segment 3 elementowe poczynając od przecinka w obie strony a następnie każdy segment zamienić na liczbę oktagonalną: 110010,0112 110010,0112 110 010, 0112 110 010, 0112 6 2, 38 6 2, 38 62,38 62,38 Liczbę oktagonalną zamieniamy na liczbę binarną postępując odwrotnie 24 kwietnia 2013 Wojciech Kucewicz 21 Ł Ł Ł Ł Ł Ł Ł Ł Ł Ł Kod binarny Ł kod heksadecymalny Kod binarny Ł kod heksadecymalny Liczbę binarną należy podzielić na segment 4 elementowe poczynając od przecinka w obie strony, a następnie każdy segment zamienić na liczbę heksadecymalną: 110010,0112 110010,0112 0011 0010, 01102 0011 0010, 01102 3 2, 616 3 2, 616 32,616 32,616 Liczbę heksadecymalną zamieniamy na liczbę binarną postępując odwrotnie 24 kwietnia 2013 Wojciech Kucewicz 22 Ł Ł Ł Ł Ł Ł Ł Ł Ł Ł Cyfrowy zapis informacji Cyfrowy zapis informacji Kod alfanumeryczny Kod alfanumeryczny 24 kwietnia 2013 Wojciech Kucewicz 23 Kod alfanumeryczny ASCII Kod alfanumeryczny ASCII W komputerach musi być jakiś sposób przedstawiania oprócz liczb także liter i innych symboli. Określenie alfanumeryczny jest stosowane do tych symboli, które zawierają także cyfry dziesiętne. Sposób przyporządkowania odpowiedniego kodu symbolom alfanumerycznym nazywamy kodem ASCII od angielskiej nazwy dokumentu: American Standard Code for Information Interchange. Kod ASCII został zaproponowany w roku 1968. Kod ASCII jest kodem 7-bitowym, często 8 bit wykorzystuje się do kontroli parzystości. W latach 80-tych powstał standard ISO 8859 (Extended ASCII), który definiuje dodatkowe 128 znaków charakterystycznych dla różnych języków. 24 kwietnia 2013 Wojciech Kucewicz 24 Kod alfanumeryczny ASCII Kod alfanumeryczny ASCII Znaki w kodzie ASCII są przyporządkowane liczbom, które można zapisać w dowolnym kodzie numerycznym. Character ASCII (bin) ASCII (hex) Decimal Octal A 1000001 41 65 101 B 1000010 42 66 102 C 1000011 43 67 103 & K 1001011 4B 75 113 a 1100001 61 97 141 & 1 0110001 31 49 61 0100111 27 39 47 24 kwietnia 2013 Wojciech Kucewicz 25 Kod alfanumeryczny ASCII Kod alfanumeryczny ASCII Przykład: Wyrażenie Binarnie Octagonalnie Heksadecymalnie Decymalnie Euro 2012 01000101 105 45 69 E 01110101 165 75 117 u 01110010 162 72 114 r 01101111 157 6F 111 o 00100000 40 20 32 00110010 62 32 50 2 00110000 60 30 48 0 00110001 61 31 49 1 00110010 62 32 50 2 010001010111010101110010011011110010000000110010001100000011000100110010 24 kwietnia 2013 Wojciech Kucewicz 26 Transmisja informacji Transmisja informacji 1. Dane w kodzie ASCII wprowadzane są z klawiatury 2. Przemieszczane są w blokach (bajtach) przy użyciu procesora 3. Gromadzone są w pamięci 24 kwietnia 2013 Wojciech Kucewicz 27 Cyfrowy zapis informacji Cyfrowy zapis informacji Kod Gray a Kod Gray a 24 kwietnia 2013 Wojciech Kucewicz 28 Kod BCD Gray a Kod BCD Gray a L. bin. Kod Gray a Kod Gray a L. L. bin L. dzies. dzies. Bn& Bi& B0 Gn& Gi& G0 Bn& Bi& B0 Gn& Gi& G0 0 0000 0000 8 1000 1100 1 0001 0001 9 1001 1101 2 0010 0011 10 1010 1111 3 0011 0010 11 1011 1110 4 0100 0110 12 1100 1010 5 0101 0111 13 1101 1011 6 0110 0101 14 1110 1001 7 0111 0100 15 1111 1000 Kod Gray a ma taką właściwość, że jego sąsiednie słowa różnią się tylko jednym bitem: Gn = Bn Gi = (Bi + Bi+1) mod. 2 24 kwietnia 2013 Wojciech Kucewicz 29 Cyfrowy zapis informacji Cyfrowy zapis informacji Kody BCD Kody BCD 24 kwietnia 2013 Wojciech Kucewicz 30 Kod BCD 8421 Kod BCD 8421 W kodzie BCD (ang. Binary coded decimal) każda cyfra liczb dziesiętnej jest oddzielnie kodowana dwójkowo w postaci 4-bitowego słowa. Najpopularniejszy jest kod BCD 8421 obejmujący pierwsze 10 liczb z 4- bitowego naturalnego kodu dwójkowego. Kod Kod Cyfra Cyfra BCD8421 BCD8421 0 0000 5 0101 1 0001 6 0110 2 0010 7 0111 3 0011 8 1000 4010091001 Przykładowo liczba 36910 będzie zakodowana następująco: 0011 0110 1001 To nie jest liczba 0011 0110 1001 ! 36 9 24 kwietnia 2013 Wojciech Kucewicz 31 Kod Aikena Kod Aikena W kodzie BCD (ang. Binary coded decimal) Aikena waga bitów jest 2-4-2-1. Uzupełnienie do 1 liczb binarnych w tym kodzie daje uzupełnienie do 9 odpowiednich liczb dziesiętnych. Np. 4 Ł 0100 Ł U1=1011 Ł U9=2+2+1=5 Kod z taką właściwością nazywamy kodem samouzupełniającym. Kod Kod Cyfra Cyfra Aikena Aikena 0 0000 5 1011 1 0001 6 1100 2 0010 7 1101 3 0011 8 1110 4 0100 9 1111 24 kwietnia 2013 Wojciech Kucewicz 32 Kod z nadmiarem 3 (XS3) Kod z nadmiarem 3 (XS3) W kodzie BCD (ang. Binary coded decimal) z nadmiarem 3 liczenie zaczyna się od 0011. Nie występuje cztery 0 lub cztery 1. Jest to kod samouzupełniający. Cyfra Kod X3 Cyfra Kod X3 0 0011 5 1000 1 0100 6 1001 2 0101 7 1010 3 0110 8 1011 4 0111 9 1100 24 kwietnia 2013 Wojciech Kucewicz 33 Kod 1 z 10 Kod 1 z 10 Kod 1 z 10 jest przykładem kodu k z n. Koncepcyjnie jest to kod do wprowadzania cyfr kodu dziesiętnego przez 10 dziesięć wzajemnie wyłączalnych klawiszy. Stosowany jest powszechnie w relacjach człowiek- układ cyfrowy. W technice cyfrowej używa się określenia koder, jako nazwy układu służącego do przetwarzania liczb w kodzie 1 z 10 Cyfra Kod 1z10 Cyfra Kod 1z10 0 00000000001 5 0000010000 1 00000000010 6 0001000000 2 00000000100 7 0010000000 3 0000001000 8 0100000000 4 0000010000 9 1000000000 24 kwietnia 2013 Wojciech Kucewicz 34 Kod 7-segmentowy Kod 7-segmentowy Kod 7-segmentowy służy do wyświetlania cyfr na wskazniku 7-segmentowym. Każda cyfra jest tworzona przez zapalenie odpowiednich segmentów wskaznika. a a a a Kod 7-segm. Kod 7-segm. Cyfra Cyfra abcdefg abcdefg f b f b f b f b 0 1111110 5 1011011 g g g g 1 0110000 6 1011111 e c e c 2 1101101 7 1110000 e c e c 3 1111001 8 1111111 d d d d 4 0110011 9 1111011 24 kwietnia 2013 Wojciech Kucewicz 35 Cyfrowy zapis informacji Cyfrowy zapis informacji Zapis liczb dwójkowych Zapis liczb dwójkowych ze znakiem ze znakiem 24 kwietnia 2013 Wojciech Kucewicz 36 Liczby naturalne Liczby naturalne L. dzies. L. binarna 1111 + 1 = 10000 15 + 1 = ? 0 0000 1 0001 0100 2 0010 0011 0101 3 0011 +4 +4 0010 0110 +3 +5 +3 +5 40100 +2 +6 +2 +6 50101 0001 0111 6 0110 +1 +7 +1 +7 70111 0 8 0 8 0000 1000 8 1000 1 9 1001 15 9 15 9 10 1010 1111 1001 14 10 14 10 11 1011 13 11 13 11 12 1100 12 12 1110 1010 13 1101 1101 1011 14 1110 1100 24 kwietnia 2013 15 1111 Wojciech Kucewicz 37 Zapis dwójkowy ze znakiem Zapis dwójkowy ze znakiem W zbiorze liczb rzeczywistych istnieją liczby ujemne, które oznacza się znakiem minus (-). W dwójkowym systemie liczbowym znak liczby może być wprowadzony tylko w postaci odrębnego bitu znaku. Bitem znaku jest zawsze bit najbardziej znaczący. Jeżeli bit znaku jest równy 1, to reprezentuje umownie znak - , natomiast gdy jest równy 0 odpowiada znakowi + . 24 kwietnia 2013 Wojciech Kucewicz 38 Zapis dwójkowy ze znakiem Zapis dwójkowy ze znakiem L. dzies. L. binarna Znak 0100 0 0000 0011 0101 1 0001 0010 0110 2 0010 3 0011 0001 0111 40100 + 50101 6 0110 0000 1000 70111 8 1000 1111 1001 9 1001 10 1010 1110 1010 11 1011 1101 1011 12 1100 - 1100 13 1101 14 1110 15 1111 24 kwietnia 2013 Wojciech Kucewicz 39 Zapis dwójkowy ze znakiem Zapis dwójkowy ze znakiem Istnieją trzy zasadnicze sposoby kodowania liczb dwójkowych ze znakiem: " znak-moduł (ZM) " znak-uzupełnienie do 1 (U1) " znak-uzupełnienie do 2 (U2) 24 kwietnia 2013 Wojciech Kucewicz 40 Uzupełnienie do 9 Uzupełnienie do 9 Odejmowanie 83 53 = 83 + (-53) = 30 Liczba ujemna -53 99 53 = 46 Ł uzupełnienie do 9 83 + 46 = 129 Ł 29 + 1 = 30 24 kwietnia 2013 Wojciech Kucewicz 41 Uzupełnienie do 10 Uzupełnienie do 10 Odejmowanie 83 53 = 83 + (-53) = 30 Liczba ujemna -53 100 53 = 47 Ł uzupełnienie do 10 83 + 47 = 130 X 24 kwietnia 2013 Wojciech Kucewicz 42 Zapis dwójkowy w kodzie ZM Zapis dwójkowy w kodzie ZM L. dzies. L. binarna L. całko. 0 0000 0 0100 0011 0101 1 0001 1 2 0010 2 0010 +4 0110 +4 +3 +5 +3 +5 3 0011 3 +2 +6 +2 +6 401004 0001 0111 +1 +7 +1 +7 501015 601106 0 -0 0 -0 0000 1000 7 0111 7 8 1000 -0 -7 -1 -7 -1 9 1001 -1 1111 1001 -6 -2 -6 -2 10 1010 -2 -5 -3 -5 -3 11 1011 -3 -4 -4 1110 1010 12 1100 -4 1101 1011 13 1101 -5 1100 14 1110 -6 15 1111 -7 24 kwietnia 2013 Wojciech Kucewicz 43 Zapis dwójkowy ZM Zapis dwójkowy ZM Zakres liczbowy zależy od ilości bitów. Dla n bitów wynosi -(2n-1-1) d" L(A) d" +(2n-1 -1) np. za pomocą 8-bitowego słowa (1 bajtu) można przedstawiać liczby od -127 do 127. Liczba 12 będzie miała formę 00001100 Liczba -12 będzie miała formę 10001100 W zapisie ZM liczba zero może przyjmować dwie formy: 00000000 lub 10000000 Podwójna reprezentacja O może stwarzać problemy przy realizacji algorytmów arytmetycznych (wada). 24 kwietnia 2013 Wojciech Kucewicz 44 Zapis dwójkowy w kodzie U 1 Zapis dwójkowy w kodzie U 1 W kodzie uzupełnienia do 1 (ang. 1 s complement) liczby dodatnie reprezentowane są jak w kodzie binarnym pod warunkiem, że najbardziej znaczący bit ma wartość 0. Liczby ujemne na najbardziej znaczącej pozycji mają 1, a pozostałe bity mają przeciwne wartości niż w przypadku liczby dodatniej. Uzupełnieniem liczby N w kodzie U1 jest liczba C: CU1 = (2n 1) N np. dla liczby N = 12 w formacie 8-bitowym, liczba 12U1 wynosi: (2n 1) 1 1 1 1 1 1 1 1 N - 0 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1- NU1 45 24 kwietnia 2013 Wojciech Kucewicz Zapis dwójkowy w kodzie U 1 Zapis dwójkowy w kodzie U 1 L. dzies. L. binarna L. całko. 0 0000 0 0100 0011 0101 1 0001 1 2 0010 2 0010 +4 0110 +4 +3 +5 +3 +5 3 0011 3 +2 +6 +2 +6 401004 0001 0111 +1 +7 +1 +7 501015 601106 0 -7 0 -7 0000 1000 7 0111 7 8 1000 -7 -0 -6 -0 -6 9 1001 -6 1111 1001 -1 -5 -1 -5 10 1010 -5 -2 -4 -2 -4 11 1011 -4 -3 -3 1110 1010 12 1100 -3 1101 1011 13 1101 -2 1100 14 1110 -1 15 1111 -0 24 kwietnia 2013 Wojciech Kucewicz 46 24 kwietnia 2013 Wojciech Kucewicz 46 Zapis dwójkowy w kodzie U 1 Zapis dwójkowy w kodzie U 1 Zakres liczbowy zależy od ilości bitów. Dla n bitów wynosi -(2n-1-1) d" L(A) d" +(2n-1 -1) np. za pomocą 8-bitowego słowa (1 bajtu) można przedstawiać liczby od -127 do 127. Liczba 12 będzie miała formę 00001100 Liczba -12 będzie miała formę 11110011 Liczbę ujemną w formacie U1 uzyskuje się przez zanegowanie wszystkich bitów liczby dodatniej Liczba 0 ma także dwie reprezentacje: " dodatnią 00000000 " ujemną - 11111111 24 kwietnia 2013 Wojciech Kucewicz 47 Zapis dwójkowy w kodzie U 2 Zapis dwójkowy w kodzie U 2 W kodzie uzupełnienia do 2 (ang. 2 s complement) liczby dodatnie reprezentowane są jak w kodzie binarnym pod warunkiem, że najbardziej znaczący bit ma wartość 0. Liczba ujemna X w kodzie U2 reprezentowana takim samym słowem jak liczba X+1 w kodzie U1. Uzupełnieniem liczby N w kodzie U2 jest liczba C: CU2 = 2n N = (2n 1) - N +1 = CU1 + 1 np. dla liczby N = 12 w formacie 8-bitowym, liczba 12U2 wynosi: 1 0 0 0 0 0 0 0 0 2n - 0 0 0 0 1 1 0 0 N 1 1 1 1 0 1 0 0- NU2 24 kwietnia 2013 Wojciech Kucewicz 48 Zapis dwójkowy w kodzie U 2 Zapis dwójkowy w kodzie U 2 L. dzies. L. binarna L. całko. 0 0000 0 0100 0011 0101 1 0001 1 2 0010 2 0010 +4 0110 +4 +3 +5 +3 +5 3 0011 3 +2 +6 +2 +6 401004 0001 0111 +1 +7 +1 +7 501015 601106 0 -8 0 -8 0000 1000 7 0111 7 8 1000 -8 -1 -7 -1 -7 9 1001 -7 1111 1001 -2 -6 -2 -6 10 1010 -6 -3 -5 -3 -5 11 1011 -5 -4 -4 1110 1010 12 1100 -4 1101 1011 13 1101 -3 1100 14 1110 -2 15 1111 -1 24 kwietnia 2013 Wojciech Kucewicz 49 24 kwietnia 2013 Wojciech Kucewicz 49 Zapis dwójkowy w kodzie U 2 Zapis dwójkowy w kodzie U 2 Zakres liczbowy zależy od ilości bitów. Dla n bitów wynosi -(2n-1-1) d" L(A) d" +(2n-1 -1) np. za pomocą 8-bitowego słowa (1 bajtu) można przedstawiać liczby od -128 do 127. Liczba 12 będzie miała formę 00001100 Liczba -12 będzie miała formę 11110100 Liczbę ujemną w formacie U2 uzyskuje się przez zanegowanie wszystkich bitów liczby dodatniej i dodanie 1 Liczba 0 ma reprezentację: 00000000 24 kwietnia 2013 Wojciech Kucewicz 50 Reprezentacja liczb w różnych Reprezentacja liczb w różnych zapisach zapisach Liczba Liczba ZM U1 U2 dziesiętna heksadecymalna -128 80 - - 1000 0000 -127 81 1111 1111 1000 0000 1000 0001 -64 C0 1100 0000 1101 11111 1100 0000 -16 F0 1001 0000 1110 1111 1111 0000 -2 FE 1000 0010 1111 1101 1111 1110 -1 FF 1000 0001 1111 1110 1111 1111 0000 0000 0000 0000 00 0000 0000 1000 0000 1111 1111 1 1 0000 0001 0000 0001 0000 0001 127 7F 0111 1111 0111 1111 0111 1111 24 kwietnia 2013 Wojciech Kucewicz 51 Dodawanie Dodawanie liczb binarnych liczb binarnych ze znakiem ze znakiem 24 kwietnia 2013 Wojciech Kucewicz 52 Dodawanie liczb w kodzie ZM Dodawanie liczb w kodzie ZM Liczby A i B są dodatnie Liczba A>0 a liczba B<0 Liczba A<0 a liczba B>0 Liczby A i B są ujemne 24 kwietnia 2013 Wojciech Kucewicz 53 Dodawanie liczb w kodzie U1 Dodawanie liczb w kodzie U1 Liczby A i B są dodatnie Liczba A>0 a liczba B<0 Liczba A<0 a liczba B>0 Liczby A i B są ujemne 24 kwietnia 2013 Wojciech Kucewicz 54 Dodawanie liczb w kodzie U2 Dodawanie liczb w kodzie U2 Liczby A i B są dodatnie Liczba A>0 a liczba B<0 Liczba A<0 a liczba B>0 Liczby A i B są ujemne 24 kwietnia 2013 Wojciech Kucewicz 55 Liczby Liczby zmiennoprzecinkowe zmiennoprzecinkowe 24 kwietnia 2013 Wojciech Kucewicz 56 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Omawiane do tej pory liczby były przedstawiane w tak zwanej reprezentacji stałoprzecinkowej (fixed-point notation), w której położenie kropki jest stałe niezależne od wielkości liczb. Przykładowo format 8-bitowy liczby można zapisać następująco: XXXX.XXXX Jeżeli liczby wprowadzone do tego formatu znacznie się od siebie różnią np. A=1234,00 i B=0,0005579 to wiąże się to z dużym błędem obcięcia liczby B: A = 1234,0000 B = 0000,0005 24 kwietnia 2013 Wojciech Kucewicz 57 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Aby uniknąć błędów zapisu reprezentacji stałoprzecinkowej (fixed point notation), stosuje się również zmiennoprzecinkowy zapis liczb (floating-poit notation) Reprezentację zmiennoprzecinkową liczby L definiuje się jako złożenie dwóch słów M i W L = M * pW gdzie słowo M (mantysa) liczba ułamkowa ze znakiem słowo W (wykładnik) liczba całkowita ze znakiem p - podstawa kodu zastosowane do zapisu M i W Przykładowo liczby A=1234,0 i B=0,0005579 można zapisać: A = 0,1234 * 104 B = 0,5579 * 10-3 24 kwietnia 2013 Wojciech Kucewicz 58 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Istotną zaletą reprezentacji zmiennoprzecinkowej jest duży zakres liczb, które można w ten sposób przedstawić. W przypadku 4 bitowej mantysy i wykładnika, można przedstawić liczby w zakresie: 0,0000 * 100000 d" L d" 0.9999 * 109999 Liczby binarne można przedstawiać w kodzie ZM, U1 lub U2 0,0000 * 20000 d" L d" 0.1111 * 21111 24 kwietnia 2013 Wojciech Kucewicz 59 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Dodawanie liczb zmiennoprzecinkowych wymaga najpierw wyrównania wykładników, a następnie właściwa operację dodawania wykonuje się na mantysach jak na stałoprzecinkowych liczbach ze znakiem. W celu wyrównania wykładników mniejszy z nich odejmuje się od większego i mantysę związaną z tym mniejszym przesuwa się w prawo o liczbę pozycji równą otrzymanej różnicy. Wynik jest sumą mantys z większym wykładnikiem. Dodanie liczb binarnych A=0,1101*21000 i B=0,1011*20101 wykonujemy następująco: 1000 0101 = 0011 (3) B=0,0001011 011 A+B = (0,1101000 + 0,0001011)*21000 =0,1111011 *21000 24 kwietnia 2013 Wojciech Kucewicz 60 Zapis dwójkowy w kodzie U 2 Zapis dwójkowy w kodzie U 2 W kodzie uzupełnienia do 2 (ang. 2 s complement) liczby dodatnie reprezentowane są jak w kodzie binarnym pod warunkiem, że najbardziej znaczący bit ma wartość 0. Liczba ujemna X w kodzie U2 reprezentowana takim samym słowem jak liczba X+1 w kodzie U1. Uzupełnieniem liczby N w kodzie U2 jest liczba C: CU2 = 2n N = (2n 1) - N +1 = CU1 + 1 Za pomocą n-bitowego słowa (uwzględniając bit znaku) można przedstawić liczby z zakresu: -2n-1 d" L(A) d" +(2n-1 -1) 24 kwietnia 2013 Wojciech Kucewicz 61 Zapis dwójkowy w kodzie U 2 Zapis dwójkowy w kodzie U 2 Np. za pomocą 8-bitowego słowa (1 bajtu) można przedstawiać liczby od -128 do 127. Liczba 12 będzie miała formę 00001100 Liczba -12 będzie miała formę 11110100 Wartość ujemną wylicza się przez odjęcie modułu liczby od liczby 2n -12 = 1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 1 0 0 1 1 1 1 0 1 0 0 Liczba 0 ma tylko jedną reprezentację: 00000000 24 kwietnia 2013 Wojciech Kucewicz 62 Reprezentacja liczb w różnych Reprezentacja liczb w różnych zapisach zapisach Liczba Liczba ZM U1 U2 dziesiętna heksadecymalna -128 80 - - 1000 0000 -127 81 1111 1111 1000 0000 1000 0001 -64 C0 1100 0000 1101 11111 1100 0000 -16 F0 1001 0000 1110 1111 1111 0000 -2 FE 1000 0010 1111 1101 1111 1110 -1 FF 1000 0001 1111 1110 1111 1111 0000 0000 0000 0000 00 0000 0000 1000 0000 1111 1111 1 1 0000 0001 0000 0001 0000 0001 127 7F 0111 1111 0111 1111 0111 1111 24 kwietnia 2013 Wojciech Kucewicz 63 Dodawanie Dodawanie liczb binarnych liczb binarnych ze znakiem ze znakiem 24 kwietnia 2013 Wojciech Kucewicz 64 Dodawanie liczb w kodzie ZM Dodawanie liczb w kodzie ZM Liczby A i B są dodatnie Liczba A>0 a liczba B<0 Liczba A<0 a liczba B>0 Liczby A i B są ujemne 24 kwietnia 2013 Wojciech Kucewicz 65 Dodawanie liczb w kodzie U1 Dodawanie liczb w kodzie U1 Liczby A i B są dodatnie Liczba A>0 a liczba B<0 Liczba A<0 a liczba B>0 Liczby A i B są ujemne 24 kwietnia 2013 Wojciech Kucewicz 66 Dodawanie liczb w kodzie U2 Dodawanie liczb w kodzie U2 Liczby A i B są dodatnie Liczba A>0 a liczba B<0 Liczba A<0 a liczba B>0 Liczby A i B są ujemne 24 kwietnia 2013 Wojciech Kucewicz 67 Liczby Liczby zmiennoprzecinkowe zmiennoprzecinkowe 24 kwietnia 2013 Wojciech Kucewicz 68 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Omawiane do tej pory liczby były przedstawiane w tak zwanej reprezentacji stałoprzecinkowej (fixed-point notation), w której położenie kropki jest stałe niezależne od wielkości liczb. Przykładowo format 8-bitowy liczby można zapisać następująco: XXXX.XXXX Jeżeli liczby wprowadzone do tego formatu znacznie się od siebie różnią np. A=1234,00 i B=0,0005579 to wiąże się to z dużym błędem obcięcia liczby B: A = 1234,0000 B = 0000,0005 24 kwietnia 2013 Wojciech Kucewicz 69 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Aby uniknąć błędów zapisu reprezentacji stałoprzecinkowej (fixed point notation), stosuje się również zmiennoprzecinkowy zapis liczb (floating-poit notation) Reprezentację zmiennoprzecinkową liczby L definiuje się jako złożenie dwóch słów M i W L = M * pW gdzie słowo M (mantysa) liczba ułamkowa ze znakiem słowo W (wykładnik) liczba całkowita ze znakiem p - podstawa kodu zastosowane do zapisu M i W Przykładowo liczby A=1234,0 i B=0,0005579 można zapisać: A = 0,1234 * 104 B = 0,5579 * 10-3 24 kwietnia 2013 Wojciech Kucewicz 70 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Istotną zaletą reprezentacji zmiennoprzecinkowej jest duży zakres liczb, które można w ten sposób przedstawić. W przypadku 4 bitowej mantysy i wykładnika, można przedstawić liczby w zakresie: 0,0000 * 100000 d" L d" 0.9999 * 109999 Liczby binarne można przedstawiać w kodzie ZM, U1 lub U2 0,0000 * 20000 d" L d" 0.1111 * 21111 24 kwietnia 2013 Wojciech Kucewicz 71 Liczby zmiennoprzecinkowe Liczby zmiennoprzecinkowe Dodawanie liczb zmiennoprzecinkowych wymaga najpierw wyrównania wykładników, a następnie właściwa operację dodawania wykonuje się na mantysach jak na stałoprzecinkowych liczbach ze znakiem. W celu wyrównania wykładników mniejszy z nich odejmuje się od większego i mantysę związaną z tym mniejszym przesuwa się w prawo o liczbę pozycji równą otrzymanej różnicy. Wynik jest sumą mantys z większym wykładnikiem. Dodanie liczb binarnych A=0,1101*21000 i B=0,1011*20101 wykonujemy następująco: 1000 0101 = 0011 (3) B=0,0001011 011 A+B = (0,1101000 + 0,0001011)*21000 =0,1111011 *21000 24 kwietnia 2013 Wojciech Kucewicz 72