str. 3
4a. Reprezentacje znaków w komputerze
Wszelkie informacje przetwarzane w komputerze są ciągam bitów. Dlatego każdy znak wprowadzany z klawiatury (np.
A, a, 7, %, !), każda liczba (np. 17; 5,(3); -8), dźwięk, obraz muszą byd zapisane jako sekwencje 0-1. W zależności od typu znaku, przyjęte są różne umowy co do ich kodowania, czyli zamiany na reprezentację binarną.
4.1.
Znaki alfanumeryczne
Znaki alfanumeryczne to znaki, które mogą byd wprowadzone za pomocą klawiatury komputera, czyli oprócz cyfr 0-9, liter a-Z również znaki interpunkcyjne, symbole matematyczne i znaki specjalne, np.: ";", "+", "(", "#", "!", "@".
Uwzględnione są również specyficzne znaki stosowane w alfabetach różnych języków, takie jak: "ą", "é", "ç".
Przykładowe standardy kodowania:
ASCII (ang. American Standard Code for Information Interchange)- 7-bitowy kod przyporządkowujący liczby z zakresu 0-127 (w sumie 95 znaków widocznych i 33 niewidoczne):
literom alfabetu angielskiego (np. 65-90 dla dużych liter, czyli 010b bbbb),
cyfrom (48-57 czyli 0011 bbbb),
znakom przestankowym
i innym symbolom oraz poleceniom sterującym
Rozszerzone kody ASCII – dzięki zagospodarowaniu ósmego bitu posiadają 256 pozycji (pierwsze 128 tak jak ASCII, następne to znaki narodowe i inne symbole). Różne warianty wykorzystania tego bitu zostały nazwane kodami stron. Problemem było istnienie wielu równoległy standardów kodowania znaków, które nie były ze sobą kompatybilne. Międzynarodowa organizacja standaryzująca ISO stworzyła normy, znane powszechnie pod nazwą ISO-8859-x, gdzie x jest cyfrą od 1 do 10. Europa Wschodnia, łącznie z Polską dostała numer 2. Niestety Bill G.
wprowadził strony kodowe ANSI, niezgodne z ISO…
Kody rodziny EBCDIC (ang. Extended Binary Coded Decimal Interchange Code) - EBCDIC to rozszerzony zapisywany dziesiętnie kod wymiany informacji, używany w systemach firmy IBM.
Kody służące do kodowania znaków UNICODE
UNICODE to światowy standard służący do kodowania znaków, przy czym Unicode definiuje jedynie zestaw znaków, a nie sposób jego kodowania. Każdy znak Unicode ma swój unikalny numer - tzw code point - przedstawiany jako liczba w systemie szesnastkowym wraz z przedrostkiem U ( np. U+0041 przedstawia A). Unicode jest zgodny z ASCII.
Unicode jest swoistą bazą kodowania dla wszystkich języków i znaków. Cechy Unicode:
Jednoznacznośd. Jeden kod odpowiada jednemu znakowi i odwrotnie.
Uniwersalnośd. Obejmuje wszystkie powszechnie używane języki oraz symbole.
Efektywnośd. Identyfikacja znaku nie zależy od sekwencji sterującej czy znaków następujących bądź poprzedzających.
Identyfikacja znaku a nie wygląd (styl, wielkośd, język są nieistotne).
Własności znaków (np. kolejnośd alfabetyczna) nie zależą od położenia w tabeli kodów ale są określone w tablicy własności.
Logiczny porządek (porządek, w jakim są pisane znaki).
Do kodowania znaków zapisanych w UNICODE stosowane są najczęściej kody UTF-8, UTF-16 i UTF-32.
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2 SP ! ” # $ % & ‘ ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ DEL
str. 4
UTF-8 – obecnie najpopularniejszy system kodowania Unikod.
UTF-8 wykorzystuje od 1 do 4 bajtów do zakodowania pojedynczego znaku. Liczba bajtów potrzebna do zakodowania znaku w UTF-8, zależy od liczby bitów znaczących w Unikod. Każdy bajt UTF-8 zaczyna się od bitów wiodących. Jeżeli do zakodowania znaku potrzebny jest tylko 1 bajt – bitem wiodącym jest 0 (znaki ASCII).
W przeciwnym razie pierwszy bajt zawiera informację o liczbie bajtów a pozostałe bajty zaczynają się od 10.
Liczba bitów
znaczących Bajt 1. UTF-8 Bajt 2. UTF-8 Bajt 3. UTF-8
1-7 0 b
6b
5b
4b
3b
2b
1b
0
8-11 110 b
11b
10b
9b
8b
7 10 b
6b
5b
4b
3b
2b
1b
0
12-16 1110 b
16b
15b
14b
13 10 b
12b
11b
10b
9b
8b
7 10 b
6b
5b
4b
3b
2b
1b
0
Np. Znak
⇔
ma code point U+21D4 (w systemie szesnastkowym), a w systemie binarnym zajmuje 2 bajty:0 x21D4 = 0 0 1 0 0 0 0 1 1 1 0 1 0 1 0 0
Ponieważ znak ⇔ ma 14 bitówznaczących, to zgodnie z tabelą kodowania w UTF-8 znak ⇔ zajmuje dokładnie 3 bajty. Każdy z nich zaczyna się od bitów wiodących. Pierwszy bajt ma bity wiodące 1110, które oznaczają, że znak zajmie 3 bajty. Następne 2 bajty mają identyczne bity wiodące 10. Po bitach wiodących zapisane są bity znaku (bit najmłodszy z Unikod na miejsce najmłodszego bitu w UTF-8 itd.).
0 x2 1 D 4 = 0 0 1 0 0 0 0 1 1 1 0 1 0 1 0 0
W rezultacie znak ⇔ ma kod11100010 10000111 10010100 UTF
,
a w postaci szesnastkowej: E2 87 94.4.2.
Obrazy
Są dwa sposoby kodowania obrazu za pomocą bitów: grafika rastrowa i grafika wektorowa.
W grafice rastrowej obrazy budowane są z położonych blisko siebie punktów – pikseli w różnych kolorach, które stwarzają pozorny obraz ciągły. Do zapisu obrazu rastrowego służy bitmapa - dwuwymiarowa tablica pikseli.
Bitmapę charakteryzują następujące parametry:
- rozdzielczośd - wysokośd i szerokośd bitmapy wyrażone liczbą pikseli w pionie i w poziomie.
- głębia koloru - liczba bitów użytych do reprezentacji koloru jednego piksela. Obraz o głębi x-bitowej ma 2x kolorów. W przypadku urządzeo elektronicznych emitujących światło (np. monitory) stosuje się m.in.
modele barw RGB, HSB a w przypadku urządzeo drukujących - CMY i CMYK.
4.3.
Kontrola transmisji danych
Bit parzystości,
Suma kontrolna,
CRC
Zadania
4.1. Rozkoduj obraz:
a) 5X16 pikseli o głębi 1b/pix zakodowany kodem ASCII: &f UU Ue UW &U
b) 3x4 pikseli o głębi 2b/pix zakodowany kodem ASCII: @ _ A przy umowie, że 00-czarny, 11 – biały, 01 – czerwony, 10- zielony)
4.2. Dane słowa 8-bitowe mają dodaną odpowiednią sumę kontrolną. Określ, które uległy zniekształceniu a) 110111011
b) 0101110111
c) 01011101011 d) 0101110100
1 1 1 0 0 0 1 0 1 0 0 0 0 1 1 1 1 0 0 1 0 1 0 0
bity znaczące znaku