DZIESIĘTNY SYSTEM LICZBOWY Do zapisu dowolnej liczby system wykorzystuje dziesięć symboli (cyfr): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Dowolną liczbę w systemie dziesiętnym możemy przedstawić jako następująca sumę: (an-1...a1a0)(10) = an-1*10(n-1) +...+ a1*101 + a0*100 = gdzie: i - numer pozycji w liczbie, ai - dowolna z cyfr od 0 do 9, n - ilość cyfr (pozycji) w liczbie n−1 i a ∗ 10 ∑ i i=0 Przykład: 424(10) = 4*102 + 2*101 + 4*100 pozycja jedynek (0) pozycja dziesiątek (1) pozycja setek (2) 1 DWÓJKOWY SYSTEM LICZBOWY Do zapisu dowolnej liczby system wykorzystuje dwa symbole (cyfry): 0, 1 Dowolną liczbę w systemie dwójkowym możemy przedstawić jako następująca sumę: n−1 (an-1...a1a0)B = an-1 gdzie: *2(n-1) +...+ a1 *21 + a0 *20 = i - numer pozycji w liczbie, ai - dowolna z cyfr (0 lub 1), n - ilość cyfr (pozycji) w liczbie i ∗ a 2 ∑ i i=0 Przykład: 10100B = 1*24 + 0*23 + 1*22 + 0*21 + 0*20 2 HEKSADECYMALNY (SZESNASTKOWY) SYSTEM LICZBOWY Do zapisu dowolnej liczby system wykorzystuje szesnaście symboli (cyfr i liter): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Dowolną liczbę w systemie heksadecymalnym możemy przedstawić jako następująca sumę: (an-1...a1a0)H = an-1*16(n-1) +...+ a1*161 + a0*160 = gdzie: i - numer pozycji w liczbie, ai - dowolna cyfra heksadecymalna, n - ilość cyfr (pozycji) w liczbie n−1 i a ∗ 16 ∑ i i=0 Przykład: 1C2H = 1*162 + C*161 + 2*160 Bardzo łatwa konwersja pomiędzy zapisem dwójkowym i szestnastkowym: 7𝐴𝐴𝐴𝐴𝐴𝐻𝐻 = 0111′ 1010′ 1100′ 0011 3 INFORMACJA CYFROWA W słowach cyfrowych wyróżnia się najstarszą i najmłodszą pozycję, tj. bit najbardziej znaczący zwany najstarszym (ang. MSB - Most Significant Bit) oraz bit najmniej znaczący zwany najmłodszym (ang. LSB - Least Significant Bit) an-1 ......................... a0 MSB LSB Analogicznie możemy mówić o starszym i najmłodszym bajcie lub o starszej lub młodszej tetradzie 4 KODOWANIE Kodowaniem nazywamy przyporządkowanie poszczególnym obiektom zbioru kodowanego odpowiadających im elementów zwanych słowami kodowymi, przy czym każdemu słowu kodowemu musi odpowiadać dokładnie jeden element kodowany A 111 100 B 010 C Zbiorem kodowanym może być zbiór dowolnych obiektów (cyfr, liter, symboli graficznych, stanów logicznych, poleceń do wykonania itp.) 001 Proces kodowania może być opisem słownym, wzorem (zależnością matematyczną), tabelą kodową itp. Kodem liczbowym nazywamy taki kod, który liczbom dowolnego systemu będzie przyporządkowywał słowa kodowe w postaci zero-jedynkowej (binarnej) 5 KODOWANIE LICZB I TEKSTÓW Kody binarne kod naturalny NKB kod BCD kod Gray’a inne kody Kodowanie znaków (tekstów) 26 NATURALNY KOD BINARNY (NKB) Jeżeli dowolnej liczbie dziesiętnej przyporządkujemy odpowiadająca jej liczbę binarną, to otrzymamy naturalny kod binarny (NKB) Minimalna długość k słowa binarnego reprezentującego liczbę dziesiętną A musi spełniać warunek: A〈2k 〈2A + 1 Oznacza to, że aby zakodować liczbę dziesiętną w zakresie 0-15 wystarczy wykorzystać jedną tetradę (długość słowa kodowego k=4) gdyż 15〈2 4 〈31 NKB 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 7 KOD PROSTY BCD Gdy w systemie wygodnie jest operować liczbami dziesiętnymi stosowany jest kod BCD. Liczba terad kodu BCD jest bowiem równa liczbie pozycji dziesiętnych reprezentowanej liczby. Np. dziesiętna liczba 6-pozycyjna (000000-999999) jest kodowana na 24 bitach Konstrukcja: • każdej cyfrze dziesiętnej przyporządkowujemy czterocyfrową liczbę dwójkową w kodzie NKB*); • słowo kodowe w kodzie prostym BCD otrzymujemy zapisując każdą cyfrę liczby dziesiętnej w postaci tetrady binarnej 463D = 0100’0110’0011BCD 67D = 0110’0111BCD 8 KOD GRAY’A Kod Gray’a to taki kod, którego kolejne słowa różnią się tylko na jednej pozycji Kod Gray’a tworzy się z kodu naturalnego NKB biorąc pod uwagę: gn = bn gn−1 = bn−1 ⊕ bn gn−2 = bn−2 ⊕ bn−1 NKB Kod Gray’a 000 001 010 011 100 101 110 111 000 001 011 010 110 111 101 100 9 INNE KODY BINARNE 0 1 2 3 4 5 6 7 8 9 NKB BCD Kod Gray’a 1 z 10 Johnsona 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 0000000001 0000000010 0000000100 0000001000 0000010000 0000100000 0001000000 0010000000 0100000000 1000000000 00000 00001 00011 00111 01111 11111 11110 11100 11000 10000 Długość słowa kodu „1 z n” (w tabeli „1 z 10”) Kod 5-bitowy stosowany do jest równa n, tj. liczności zbioru kodowanego kodowania cyfr dziesiętnych (liczbie kodowanych słów) Są to kody nadmiarowe (redundancyjne), w których liczba pozycji binarnych jest większa niż wynika to z ogólnej zależności A〈2k 〈2A + 1 Redundancję można wykorzystać do zwiększenia niezawodności operacji wykonywanych na liczbach 10 KODOWANIE ZNAKÓW Początki: • Harald C. M. Morse (kropka - kreska - ....); • Anatol de Baudot (dalekopis); • w pierwszych maszynach cyfrowych - kod dalekopisowy 5-bitowy, a potem 8-bitowy (EBCDIC); W 1977 roku kiedy to ANSI (American National Standards Institute) zatwierdził kod ASCII (The American Standard Code for Information Interchange). Jest to 7-bitowy kod (8 bit do kontroli parzystości), definiujący 128-elementowy zestaw znaków (character set) o wartościach kodowych od 0 do 127. Zestaw zawiera litery łacińskie (duże i małe), cyfry i znaki interpunkcji oraz różne znaki specjalne. Międzynarodowa Organizacja Standaryzacji - ISO, nadała amerykańskiemu systemowi kodowania status standardu międzynarodowego oznaczonego jako ISO 646. Kod ASCII rozszerzony wprowadza dodatkowe 128 znaków wykorzystując mało używany bit parzystości: IBM wprowadza • Code Page 474 dla USA 11 • Code Page 852 dla Europy Wschodniej KODOWANIE ZNAKÓW kod ASCII Numery bitów słowa 4 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 3 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 2 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 8 7 6 5 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DEL DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US Bit kontroli parzystości 1 0 0 1 0 0 1 1 0 1 0 1 1 1 0 P Q R S T U V W X Y Z [ \ ] ↑ ← ‘ a b c d e f g h i j k l m n o SP ! „ ≠ $ % & ` ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O 1 1 1 p q r s t u v w x y z { | } ~ DEL12 Dodawanie i odejmowanie (schemat blokowy) 13 Mnożenie Liczby dodatnie Mnożenie Można usprawnić operację mnożenia: możemy wykonywać bieżące dodawanie iloczynów cząstkowych, eliminuje to potrzebę przechowywania iloczynów cząstkowych, potrzeba mniej rejestrów. 14 Mnożenie liczb binarnych (schemat blokowy) 1) Mnożna i mnożnik ładowane są do rejestrów Q i M - Rejest A początkowo ustawiony na 0 - Rejest Q 1-bitowy początkowo ustawiony na 0 - Układ sterowania odczytuje mnożnik bit po bicie - Jeśli Q0=1 to mnożna jest dodawana do zawartości A i wynik pozostaje wA wszystkie bity rejestrów C, A i Q przesuwane są o jeden bit w prawo tzn.: C → An-1 … A0 → Qn-1 , bit Q0 jest tracony Jeśli Q0=0 to nie jest wykonywane dodawanie, a jedynie przesunięcie w prawo - Proces jest powtarzany dla każdego bitu orginalnego mnożnika - Iloczyn znajduje się w A, Q. 15 Mnożenie liczb binarnych 16 Mnożenie liczb binarnych (flow diagram) Beznakowe liczby całkowite 17 Mnożenie w notacji uzupełnienia do dwóch - algorytm Botha Rejestr Q - mnożnik Rejestr M – mnożna Rejster Q-1 jednobitowy umieszczone logicznie na prawo od najmniej znaczącego bitu Q0 rejestru Q Przesuniecie arytmetyczne w prawo: bit An-1 przesuwamy do An-2, ale także pozostaje w An-1 (jest zachowany bit znaku) 18 Dzielenie liczb binarnych bez znaku Dzielnik • • • • • • • Bity dzielnej są badane od lewej do prawej, aż zespół bitów będzie reprezentował liczbę większą lub równą dzielnikowi Aż do wystąpienia tego zdarzenia w ilorazie umieszczane są zera od lewej do prawej Gdy wystąpi już to zdarzenie to w ilorazie umieszczamy jedynkę Dzielnik jest odejmowany od dzielnej cząstkowej. Wynik jest określany jako reszta cząstkowa Począwszy od tego punktu dzielenie powtarza się cyklicznie W każdym cyklu dodatkowe bity dzielnej są dołączane do reszty cząstkowej, aż wynik będzie większy lub równy dzielnikowi. Proces ten jest kontynuowany aż wszystkie bity dzielnej zostaną zużyte. 19 Algorytm dzielenia liczb binarnych bez znaku 20 Algorytm dzielenia liczb binarnych w reprezentacji uzupełnienia do dwóch 1. załaduj dzielnik do rejestru M, a dzielną do rejestrów A i Q. np. 4 bitowa liczba 0111 → 0000’0111 1001 → 1111’1001 2. przesuń A i Q w lewo o jedną pozycję bitową 3. jeśli M i A mają takie same znaki to A ← A- M, przeciwnym razie A ← A + M 4. powyższa operacja jest udana jeśli znak A pozostaje taki sam po zakończeniu operacji a) jeśli operacja jest udana lub (A=0 i Q=0) to ustaw Q0 ← 1 b) Jeśli operacja jest nieudana i (A ≠ 0 lub Q ≠ 0) to ustaw Q0 ← 0 i przywróć poprzednią wartość A 5. powtórz kroki od 2 do 4 tyle razy ile jest pozycji bitowych w Q 6. reszta jest zawarta w A. Jeśli znaki dzielnika i dzielnej były takie same to iloraz jest w Q. W przeciwnym razie iloraz jest odwrotnością zawartości rejestru Q 21 Algorytm dzielenia liczb binarnych w reprezentacji uzupełnienia do dwóch A Q 1111 1001 wartość początkowa 1111 0010 przesunięcie w lewo 0010 dodawanie 1111 0010 przywrócenie 1110 0100 przesunięcie w lewo 0001 dodawanie 1110 0100 przywrócenie 1100 1000 przesunięcie w lewo 1111 dodawanie 1111 1001 ustawienie Q0 =1 1111 0010 przesunięcie w lewo 0010 dodawanie 1111 0010 przywrocenie Przykład: (-7) : 3 = -2 i reszta -1 ( 1001 : 0011 → M) razie iloraz jest odwrotnością zawartości rejestru Q 1101 + 1 -------1110 = -2 Reszta 1111 =-1 22