Rok akademicki 007/008, Wykład nr 3 /4 Informatyka Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia (zaoczne) Rok akademicki 007/008 Wykład nr 3 (30.03.008) Plan wykładu nr 3 Kodowanie liczb naturalny kod binarny (NKB) kod BCD kod z N (pierścieniowy) kod z 5 kod kołowy (Johnsona) kod Graya (refleksyjny) Kodowanie znaków kod ASCII kod ISO/IEC 646 kod ISO/IEC 8859 kod EBCDIC Rok akademicki 007/008, Wykład nr 3 3/4 Rok akademicki 007/008, Wykład nr 3 4/4 Kodowanie Informacje przetwarzane przez komputer to liczby, ale takŝe inne obiekty, takie jak litery, wartości logiczne, obrazy, itp. KaŜda informacja przetwarzana przez komputer musi być reprezentowana za pomocą tylko za pomocą dwóch stanów: wysokiego ( - jedynka) i niskiego (0 - zero) Konieczne są zatem reguły przekształcania róŝnych postaci informacji na informację binarną (zero-jedynkową) Proces przekształcania jednego rodzaju postaci informacji na inną postać nazywamy kodowaniem Podział kodów: liczbowe: NKB (Naturalny Kod Binarny, BCN), U, BCD, z N, z 5 alfanumeryczne: ASCII, ISO-8859, Unicode inne: Graya, Morse a Inny podział kodów: proste i detekcyjne ( z 5, z N, Graya) Kody liczbowe - Naturalny Kod Binarny (NKB) JeŜeli dowolnej liczbie dziesiętnej przyporządkujemy odpowiadającą jej liczbę binarną, to otrzymamy naturalny kod binarny (NKB)
Rok akademicki 007/008, Wykład nr 3 5/4 Rok akademicki 007/008, Wykład nr 3 6/4 Kody liczbowe - Naturalny Kod Binarny (NKB) W naturalnym kodzie binarnym za pomocą n-bitów moŝna zapisać liczbę dwójkową z zakresu: n X( ) 0, Kody liczbowe - Kod BCD Binary-Coded Decimal - dziesiętny zakodowany dwójkowo BCD - sposób zapisu liczb polegający na zakodowaniu kolejnych cyfr dziesiętnych liczby dwójkowo (NKB) przy uŝyciu czterech bitów Przykład (największe liczby dwójkowe): bit bity 3 bity L 8 bitów 0 bitów 6 bitów 3 bity K 3 8 0 6 3 3 7 55 03 65 535 4 94 967 95 Liczba dziesiętna 0 3 4 BCD 0000 000 000 00 000 Liczba dziesiętna W ogólnym przypadku kodowane są tylko znaki 0 9, zaś pozostałe kombinacje bitowe są czasem stosowane do kodowania znaku liczby lub innych znaczników 5 6 7 8 9 BCD 00 00 0 000 00 Rok akademicki 007/008, Wykład nr 3 7/4 Rok akademicki 007/008, Wykład nr 3 8/4 Kody liczbowe - Kod BCD Kod BCD umoŝliwia łatwą konwersję liczby do i z systemu dziesiętnego Obecnie kod BCD stosowany jest głównie: } } 6 } 8 000 00 000? (BCD) 000 00 000 (BCD) 00 00 00 00 { 00 { 00 { (BCD) w urządzeniach elektronicznych z wyświetlaczem cyfrowym (np. kalkulatory) w wielu komputerach BIOS przechowuje datę i czas w formacie BCD w zastosowaniach finansowych informatyki (zapis części ułamkowych kwot) 9 5 00 00 00 3 (BCD)? 953 Kody liczbowe - Przechowywanie liczb w kodzie BCD UŜycie 4 najmłodszych bitów jednego bajta, 4 starsze bity są ustawiane na jakąś konkretną wartość: 0000 (np. kod EBCDIC, liczby F0 (6) F9 (6) ) 00 (tak jak w ASCII, liczby 30 (6) 39 (6) ) Zapis dwóch cyfr w kaŝdym bajcie (starsza na starszej połówce, młodsza na młodszej połówce) - jest to tzw. spakowane BCD (ang. packed BCD) w przypadku liczby zapisanej na kilku bajtach, najmniej znacząca tetrada (4 bity) uŝywane są jako flaga znaku standardowo przyjmuje się 00 (C (6) ) dla znaku plus (+) i 0 (D (6) ) dla znaku minus (-) 7 7 000 000 0 00 000 000 0 0 (7C (7D (6) (6) ) )
Rok akademicki 007/008, Wykład nr 3 9/4 Rok akademicki 007/008, Wykład nr 3 0/4 Kody liczbowe - Kod BCD Arytmetyka w kodzie BCD: liczby w BCD nie są naturalnymi liczbami dwójkowymi, zatem nie moŝna nad nimi wykonywać normalnych działań arytmetycznych dodawanie liczb polega na wykonaniu zwykłego binarnego dodawania, a następnie jeśli otrzymany wynik jest większy od 9, to naleŝy skorygować go poprzez dodanie liczby 6 00 w przypadku odejmowania odpowiednia korekcja jest realizowana poprzez odjęcie od wyniku liczby 6 00 9 + 5 4 [00] + [00] [0] [ 0000 0] + [0000 00] [000 { 000 { ] 4 Kody liczbowe - Wady i zalety BCD w stosunku do NKB Zalety: Wady: liczenie oraz zaokrąglanie liczb w systemie o podstawie dziesięć jest łatwiejsze prostsze wyrównywanie liczb dziesiętnych przed wykonaniem operacji (np..7 +.03) prostsza konwersja do postaci dogodnej do wyświetlenia (np. dla wyświetlacza 7-segmentowego), konwersja ta moŝe być wykonana w czasie liniowym niektóre wartości niecałkowite (np. 0.) mają w kodzie BCD, w przeciwieństwie do NKB, skończoną reprezentację, dzięki temu system BCD wprowadza mniejsze błędy obliczeń operacje arytmetyczne w kodzie BCD (dodawanie, mnoŝenie) są bardziej skomplikowane w implementacji niŝ w NKB nadmiarowość - na 4 bitach moŝna zapisać 6 róŝnych wartości, a BCD wykorzystuje tylko 0 z nich operacje wykonywane w praktycznie istniejących implementacjach BCD są wolniejsze niŝ NKB Rok akademicki 007/008, Wykład nr 3 /4 Rok akademicki 007/008, Wykład nr 3 /4 Kody liczbowe - Kod BCD Kod BCD ma kilka wariantów Na poprzednich slajdach przedstawiono jego podstawową postać nazywaną BCD 84 lub SBCD (Simple Binary - Coded Decimal) W pozostałych wariantach poszczególne cyfry są kodowane w inny sposób Kody liczbowe - Kod Excess-3 Kod Excess-3 (XS-3, z nadmiarem 3) powstaje poprzez dodanie wartości 3 do cyfry dziesiętnej i zapisanie jej w kodzie BCD Cyfry 5-9 są lustrzanym odbiciem cyfr 0-4 z zanegowanymi bitami Porównanie zapisu liczb: 000 00 000 00 00 0 (BCD84) (Excess 3)
Rok akademicki 007/008, Wykład nr 3 3/4 Rok akademicki 007/008, Wykład nr 3 4/4 Kody liczbowe - Kod Excess-3 Zaletą tego sposobu kodowania jest regularność algorytmów dodawania i odejmowania, gdyŝ wynik jest korygowany w kaŝdym przypadku przy dodawaniu dwóch liczb w kodzie Excess-3 otrzymany wynik nie jest liczbą w kodzie Excess-3 po zakończeniu dodawania, jeśli otrzymana liczba jest mniejsza niŝ 0 naleŝy odjąć 3, natomiast jeśli otrzymana liczba jest większa lub równa 0, to naleŝy dodać 3 00 + 4 (XS 3) 6 + 0 (XS 3) 3 00 00(XS 3) 443 6 00 { 9 Kody liczbowe - Kod BCD 4 (Aikena( Aikena) Kod Aikena jest kodem wagowym BCD o wagach,4,, W kodzie Aikena cyfry od 0 do 4 koduje się z wyzerowanym najstarszym bitem, natomiast cyfry od 5 do 9 z ustawionym najstarszym bitem Cyfry 5-9 są lustrzanym odbiciem cyfr 0-4 z zanegowanymi bitami Porównanie zapisu liczb: 000 00 000 000 00 0 (BCD84) (BCD4) Rok akademicki 007/008, Wykład nr 3 5/4 Rok akademicki 007/008, Wykład nr 3 6/4 Kody liczbowe - Kod BCD 84-- Cyfry 5-9 są lustrzanym odbiciem cyfr 0-4 z zanegowanymi bitami Kody liczbowe - Kod BCD Przykład zastosowania: zegar w BCD84 Kod 84-- jest kodem samouzupełnieniowym Porównanie zapisu liczb: 000 00 000 0 00 000 (BCD84) (BCD84 ) h m s
Rok akademicki 007/008, Wykład nr 3 7/4 Rok akademicki 007/008, Wykład nr 3 8/4 Kody liczbowe - Kod z N (pierścieniowy) W kodzie z N długość słowa jest równa N czyli liczbie kodowanych słów Kody liczbowe - Kod z 5 Właściwości: Najbardziej jest rozpowszechniony kod z 0 Kod z 0 jest kodem wagowym o wagach 98765430 Kod z N jest kodem detekcyjnym W kodzie tym moŝna w czasie wykonywania operacji kontrolować liczbę jedynek - wykrycie braku jedynki lub wykrycie dwóch lub więcej jedynek wskazuje na błąd kod 5-bitowy - jeden znak kodowany jest na 5 bitach ( bity są zawsze równe jeden, a 3 bity są zawsze równe zeru) moŝna zakodować 0 znaków, koduje cyfry dziesiętne, kody nie są wzajemnie jednoznaczne (ta sama wartość moŝe być zakodowana w róŝny sposób) kod stałowagowy, występuje w wielu wersjach, zaleŝnie od przyjętych wag, np. 036, 034, 740 kod detekcyjny, kod z 5 jest stosowany przede wszystkim w kodach kreskowych Rok akademicki 007/008, Wykład nr 3 9/4 Rok akademicki 007/008, Wykład nr 3 0/4 Kody liczbowe - Kod kołowy owy (Johnsona) W kodzie kołowym zwiększa się liczba stanów (począwszy od najmniej znaczącego bitu) aŝ do wszystkich bitów równych Następnie stanów zaczyna ubywać (począwszy od najmniej znaczącego bitu) aŝ do osiągnięcia wartości 0000 Kolejną wartością po 0000 będzie ponownie 00000 5-bitowy kod kołowy nazywany jest kodem Johnsona Kod kołowy stosowany jest w przetwornikach jako pośredni do otrzymania kodu binarnego (NKB) na wyjściu Kody liczbowe - Kod Graya (refleksyjny) Kod dwójkowy bezwagowy, niepozycyjny, charakteryzujący się tym, Ŝe dwa kolejne słowa kodowe róŝnią się tylko stanem jednego bitu Kod cykliczny - ostatni i pierwszy wyraz tego kodu równieŝ spełniają powyŝszą zasadę Konstrukcja kodu Graya: dopisz te same słowa kodowe, ale w odwrotnej kolejności (lustrzane odbicie) do początkowych wyrazów dopisz bit o wartości 0, natomiast do odbitych lustrzanie bit o wartości
Rok akademicki 007/008, Wykład nr 3 /4 Rok akademicki 007/008, Wykład nr 3 /4 Kody liczbowe - Kod Graya (refleksyjny) Konwersja z kodu binarnego NKB na kod Graya przesunąć liczbę w postaci binarnej (NKB) o jeden bit w prawo (podzielić przez ) wykonać operację XOR na bitach liczby w postaci binarnej (NKB) i wyniku dzielenia liczby przez Kody liczbowe - Kod Graya (refleksyjny) Konwersja z kodu Graya na kod binarny NKB przyjmij pierwszą cyfrę kodu NKB równą pierwszej cyfrze (od lewej) kodu Graya kaŝdą kolejną cyfrę oblicz jako róŝnicę symetryczną (XOR) odpowiedniej cyfry kodu Graya i poprzednio wyznaczonej cyfry kodu NKB 9 00 0? (GRAY) (GRAY) 00 >> 000 00 XOR 000 Gray 0 0 0 0 xor 0 xor 0 0 xor XOR 0 0 NKB 0 00 00 Rok akademicki 007/008, Wykład nr 3 3/4 Rok akademicki 007/008, Wykład nr 3 4/4 Kody liczbowe - Kod Graya Zastosowania: Kody liczbowe - Kod Graya Zastosowania: w przetwornikach analogowo-cyfrowych, szczególnie w systemach, gdzie występują po sobie kolejne wartości, np. mechaniczne przetworniki kąt-cyfra (dekoder kąta obrotu wału) kod Graya stosowany jest do etykietowania pojedynczych procesorów w sieci będącej hiperkostką etykiety sąsiednich procesorów róŝnią się tylko jednym bitem 0
Rok akademicki 007/008, Wykład nr 3 5/4 Rok akademicki 007/008, Wykład nr 3 6/4 Kod ASCII ASCII - American Standard Code for Information Interchange Kod ASCII - Kody sterujące Kody sterujące - 33 kody (0-3, 7) 7-bitowy kod przyporządkowujący liczby z zakresu 0-7 literom (alfabetu angielskiego), cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterującym litery, cyfry oraz inne znaki drukowane tworzą zbiór znaków ASCII - jest to 95 znaków o kodach 3-6 pozostałe 33 kody (0-3 i 7) to tzw. kody sterujące słuŝące do sterowania urządzeniem odbierającym komunikat, np. drukarką czy terminalem Dec Hex Char 0 0 NUL SOH STX 3 3 ETX 4 4 EOT 5 5 ENQ 6 6 ACK 7 7 BEL 8 8 BS 9 9 TAB 0 A LF B VT C FF 3 D CR 4 E SO 5 F SI (null) (start of heading) (start of text) (end of text) (end of tramsmission) (enquiry) (acknowledge) (bell) (backspace) (horizontal tab) (NL line feed, new line) (vertical tab) (NP form feed, new page) (carriage return) (shift out) (shift in) Dec Hex Char 6 0 DLE 7 DC 8 DC 9 3 DC3 0 4 DC4 5 NAK 6 SYN 3 7 ETB 4 8 CAN 5 9 EM 6 A SUB 7 B ESC 8 C FS 9 D GS 30 E RS 3 F US 7 7F DEL (data link escape) (device control ) (device control ) (device control 3) (device control 4) (negative acknowlege) (synchronous idle) (end of trans. block) (cancel) (end of medium) (subtitute) (escape) (file separator) (group separator) (record separator) (unit separator) Rok akademicki 007/008, Wykład nr 3 7/4 Rok akademicki 007/008, Wykład nr 3 8/4 Kod ASCII - Kody sterujące a język j C Kod ASCII - Pliki tekstowe 0 0 (6) NUL - koniec łańcucha znaków, zapis: \0 7 7 (6) BEL - alarm, dźwięk głośniczka, zapis: \a 8 8 (6) BS - klawisz Backspace 9 9 (6) TAB - tabulacja (odstęp), zapis: \t 0 A (6) LF - przejście do nowego wiersza, zapis: \n 3 D (6) CR - powrót na początek wiersza, zapis: \r 7 B (6) ESC - klawisz Escape 7 7F (6) DEL - klawisz Delete elementami pliku tekstowego są wiersze, mogą one mieć róŝną długość w systemie DOS/Windows kaŝdy wiersz pliku zakończony jest parą znaków: CR, ang. carriage return - powrót karetki, kod ASCII - 3 0D (6) LF, ang. line feed - przesunięcie o wiersz, kod ASCII - 0 0A (6) załóŝmy, Ŝe plik tekstowy ma postać: rzeczywista zawartość pliku jest następująca: wydruk zawiera: przesunięcie od początku pliku (szesnastkowo), wartości poszczególnych bajtów pliku (szesnastkowo) i znaki odpowiadające tym wartościom (traktując wartości jako kody ASCII)
Rok akademicki 007/008, Wykład nr 3 9/4 Rok akademicki 007/008, Wykład nr 3 30/4 Kod ASCII - Pliki tekstowe w czasie wczytywania tekstu z pliku do pamięci komputera znaki CR i LF zastępowane są jednym znakiem - LF znak LF w języku C reprezentowany jest przez \n, zaś CR - przez \r Kod ASCII - Pliki tekstowe w systemie Linux znakiem końca wiersza jest tylko LF o kodzie ASCII - 0 0A (6) załóŝmy, Ŝe plik tekstowy ma postać: #include <stdio.h> int main() { printf("%d %X\n", \n, \n ); } return (0); 0 A przy zapisywaniu łańcucha znaków do pliku tekstowego mamy sytuację odwrotną - znak LF zastępowany jest parą CR i LF rzeczywista zawartość pliku jest następująca: podczas przesyłania pliku tekstowego (np. przez protokół ftp) z systemu Linux do systemu DOS/Windows pojedynczy znak LF zamieniany jest automatycznie na parę znaków CR i LF błędne przesłanie pliku tekstowego (w trybie binarnym) powoduje nieprawidłowe jego wyświetlanie: Rok akademicki 007/008, Wykład nr 3 3/4 Rok akademicki 007/008, Wykład nr 3 3/4 ISO/IEC 646 ISO/IEC 646 - odmiany narodowe ISO/IEC 646 - norma definiująca modyfikację 7-bitowego kodowania ASCII W normie określono 0 pozycji, na których mogły być umieszczane znaki w języku kraju, który przyjął tę normę oraz pozycje na znaki walut 0 3 4 5 6 7 8 9 A B C D E F 00 Znaki kontrolne 0 0 SP! " # $ % & ( ) * +, -. / 30 0 3 4 5 6 7 8 9 : ; < >? 40 @ A B C D E F G H I J K L M N O 50 P Q R S T U V W X Y Z [ \ ] ^ _ 60 ` a b c d e f g h i j k l m n o 70 p q r s t u v w x y z { } ~ Ŝółty - znaki narodowe niebieski - znaki walut Wszystkie pozostałe znaki są zgodne z ASCII Kodowanie to stosowano w latach 70-tych i 80-tych
Rok akademicki 007/008, Wykład nr 3 33/4 Rok akademicki 007/008, Wykład nr 3 34/4 Rozszerzenia ASCII - strony kodowe PoniewaŜ kod ASCII jest w podstawowej wersji 7-bitowy, a większość komputerów pracuje na 8-bitowych bajtach, to dodatkowy bit jest wykorzystywany do powiększenia zbioru kodowanych znaków Powstało wiele róŝnych rozszerzeń ASCII wykorzystujących ósmy bit, nazywanych stronami kodowymi Strona kodowa - sposób na przypisanie poszczególnym kodom binarnym róŝnych znaków pisarskich róŝne strony kodowe mogą przyjąć odmienne znaki dla tego samego kodu róŝne strony kodowe mogą róŝnić się wyborem znaków duŝa liczba dostępnych stron kodowych wynika z faktu, iŝ na 8 bitach moŝna zakodować tylko 56 róŝnych znaków, co jest niewystarczające do zmieszczenia w jednym zestawie znaków wszystkich alfabetów problem stron kodowych został rozwiązany po wprowadzeniu Unicode ISO/IEC 8859 ISO/IEC 8859 - zestaw standardów słuŝących do kodowania znaków za pomocą 8-bitów Standardy te zostały utworzone przez European Computer Manufacturers Association w połowie lat 80-tych, po czym zostały uznane przez ISO Wszystkie zestawy ISO 8859 mają znaki 0-7 (00 (6) -7F (6) ) takie same jak w kodzie ASCII Pozycjom 8-59 (80 (6) -9F (6) ) przypisane są dodatkowe kody sterujące, tzw. C (obecnie nie są uŝywane) W czerwcu 004 roku, grupa robocza odpowiedzialna za utrzymanie zestawów znaków kodowanych ośmiobitowo została rozwiązana, a co za tym idzie, wstrzymane zostały prace związane z ISO 8859, a skoncentrowano się na uniwersalnym zestawie znaków (UCS-) i Unicode Rok akademicki 007/008, Wykład nr 3 35/4 Rok akademicki 007/008, Wykład nr 3 36/4 ISO/IEC 8859 ISO/IEC 8859- Stosowane standardy ISO 8859: ISO 8859- (Latin-) - alfabet łaciński dla Europy zachodniej ISO 8859- (Latin-) - łaciński dla Europy środkowej i wschodniej ISO 8859-3 (Latin-3) - łaciński dla Europy południowej ISO 8859-4 (Latin-4) - łaciński dla Europy północnej ISO 8859-5 (Cyrillic) - dla cyrylicy ISO 8859-6 (Arabic) - dla alfabetu arabskiego ISO 8859-7 (Greek) - dla alfabetu greckiego ISO 8859-8 (Hebrew) - dla alfabetu hebrajskiego ISO 8859-9 (Latin-5) ISO 8859-0 (Latin-6) ISO 8859- (Thai) - dla alfabetu tajskiego ISO 8859- - brak ISO 8859-3 (Latin-7) ISO 8859-4 (Latin-8) ISO 8859-5 (Latin-9) ISO 8859-6 (Latin-0) - łaciński dla Europy środkowej ISO/IEC 8859-, Latin- - pierwsza część standard ISO/IEC 8859 kodowania znaków ( zachodnioeuropejskie ) kodowanie uŝywane w Amerykach, Europie Zachodniej, Oceanii i większej części Afryki dostępne języki: albański, angielski, baskijski, duński, estoński, fiński, francuski, hiszpański, irlandzki, islandzki, kataloński, łaciński, niderlandzki, niemiecki, norweski, portugalski, retoromański, szkocki, szwedzki, włoski składa się ze 9 znaków łacińskiego pisma po rozszerzeniu o dodatkowe przypisania znaków jest podstawą dla dwóch mapowań znaków ISO-8859- i Windows-5 SP - spacja NBSP - twarda spacja SHY - miękki dywiz (myślnik)
Rok akademicki 007/008, Wykład nr 3 37/4 Rok akademicki 007/008, Wykład nr 3 38/4 ISO/IEC 8859- ISO/IEC 8859- - Kodowanie polskich znaków ISO/IEC 8859-, Latin- ( środkowo-, wschodnioeuropejskie ) dostępne języki: bośniacki, chorwacki, czeski, węgierski, polski, rumuński, serbski, serbsko-chorwacki, słowacki, słoweński, górno- i dolnołuŝycki moŝliwość przedstawienia znaków w języku niemieckim i angielskim składa się ze 9 znaków łacińskiego pisma zapisywanych na 8-bitach kody z przedziałów 00 (6) -F (6) oraz 7F (6) -9F (6) nie są uŝywane w ISO-8859- kodowanie to jest zgodne z Polską Normą SP - spacja NBSP - twarda spacja SHY - miękki dywiz (myślnik) 8 znaków: Ą - ą Ć - ć Ę - ę Ł - ł Ń - ń Ó - ó Ś - ś Ź - ź ś - Ŝ Rok akademicki 007/008, Wykład nr 3 39/4 Rok akademicki 007/008, Wykład nr 3 40/4 ISO/IEC 8859- i ISO/IEC 8859- - porównanie EBCDIC EBCDIC - Extended Binary Coded Decimal Interchange Code 8-bitowe kodowanie znaków stworzone jako rozszerzenie kodowania BCD umoŝliwia zapisanie do 56 róŝnych symboli pojedynczy znak zapisywany jest na 8-bitach podzielonych na dwie części pierwsze 4 bity oznaczają grupę do jakiej dany znak naleŝy ostatnie 4 bity identyfikują konkretny znak kody EBCDIC nie są zgodne z ASCII EBCDIC występowało w wielu wersjach, odmiennych dla róŝnych państw większość stron kodowych EBCDIC dopuszczała stosowanie tylko dwóch języków (angielski + dodatkowy)
Rok akademicki 007/008, Wykład nr 3 4/4 Rok akademicki 007/008, Wykład nr 3 4/4 EBCDIC Kodowanie EBCDIC oraz ISO 8859- - porównanie kodowanie EBCDIC było uŝywane głównie w systemach IBM (komputery: z/os, VM, OS/390, systemy operacyjne: OS/400, i5/os) w latach 60-tych XX wieku ułatwiało wprowadzanie danych do komputera przy uŝyciu kart perforowanych (dziurkowanych) nie ma szczególnej przewagi nad systemami kodowania wywodzącymi się z ASCII (ISO 8859, Unicode), a wręcz czasem sprawia problemy brak zachowania kolejności liter zgodnie z kolejnością kodów, np. po R nie ma S na rysunku przedstawiony jest jeden z wariantów EBCDIC - CCSID 500