3. Reprezentacje znaków w komputerze

advertisement
3. 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ą być 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ą.
3.1. Znaki alfanumeryczne
Znaki alfanumeryczne to znaki, które mogą być 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: "ą", "é", "ç".
Najpopularniejszymi standardami kodowania są:
ASCII (ang. American Standard Code for Information Interchange)- 7-bitowy kod przyporządkowujący liczby
z zakresu 0-127:
 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
(w sumie 95 znaków widocznych i 33 niewidoczne).

0
0 NUL
1 DLE
2 SP
3 0
4 @
5 P
`
6
7 p
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
!
”
#
$
%
&
‘
(
)
*
+
,
-
.
/
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
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
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL

Rozszerzone kody ASCII – dzięki zagospodarowaniu ósmego bitu posiadają 256 pozycji (pierwsze 128 tak jak
ASCII, następne to znaki narodowe i inne symbole). Problemem są różne strony kodowe dla różnych organizacji i
krajów… Międzynarodowa organizacja normalizacyjna ISO stworzyła (w porozumieniu z zainteresowanymi) więcej
stron kodowych dla np. krajów Europy Wschodniej, Rosji (cyrylica), krajów Dalekiego Wschodu (Japonia, Korea).
I te normy są 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.

UNICODE - jest uniwersalnym standardem kodowania znaków, dzięki któremu można wyświetlać znaki
charakterystyczne dla różnych języków. Używa opisu literowego i liczbowej wartości dla każdego kodowanego
znaku. Wartość 16 bitowa jest definiowana jako liczba w systemie szesnastkowym wraz z przedrostkiem U ( np.
U+0041 przedstawia A). Unicode jest zgodny z ASCII. Cechy Unicode:
 Jednoznaczność. Jeden kod odpowiada jednemu znakowi i odwrotnie.
 Uniwersalność. Obejmuje wszystkie powszechnie używane języki oraz symbole.
 Efektywność. 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ść, język są nieistotne).
 Własności znaków (np. kolejność 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).
str. 6
3.2. Liczby
Kodowanie liczb opiera się na ich konwersji na system binarny. Nie mniej trzeba jeszcze pamiętać, że dana liczba zajmuje
z góry określoną liczbę bitów oraz określić jak zapisać liczby ujemne i ułamki.
3.2.1. Liczby naturalne.
Kodowanie liczby naturalnej na n-bitach polega na zapisie liczby w systemie (2) i uzupełnieniu jej od lewej strony
zerami do n pozycji.
Np. Liczba 26=11010(2) na 8 bitach:
0
0
0
1
1
0
1
0
3.2.2. Liczby całkowite.

Kod ZM (kod znak-moduł)
Wszystkie bity poza najstarszym mają takie samo znaczenie jak w naturalnym kodzie binarnym. W kodzie ZM
najstarszy bit jest bitem znaku. Jeżeli ma on wartość 0 to dana liczba jest dodatnia, jeżeli 1 to liczba jest ujemna.
W związku z tym występują dwie reprezentacje zera. Kłopotliwe jest wykonywanie działań w ZM
26 
0 0 0 1 1 0 1 0
-26 
1 0 0 1 1 0 1 0

Kod U2 (kod uzupełnień do 2)
Kodowanie U2 jest obecnie najpopularniejszą reprezentacją liczb całkowitych (oraz ułamkowych przedstawionych
w formacie stałoprzecinkowym). Operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb
binarnych bez znaku. Z tego też powodu oszczędza się na kodach rozkazów procesora. Liczba dodatnia całkowita
jest zapisana tak samo jak w ZM.
W kodzie U2 najstarszy bit n-bitowej reprezentacji ma wagę -2n-1, a pozostałe bity tradycyjnie kolejno +2n-2,
+2n-3,….
Algorytm zapisu liczby ujemnej w kodzie U2:
1. Zapisz liczbę przeciwną do danej tak jak w ZM.
2. Dokonaj inwersji bitów (czyli pozamieniaj 0 na 1 i odwrotnie:);
3. Zwiększ wynik o 1.
Np. Liczba -27 na 8 bitach w U2:
0 0 0 1 1 0 1 1

1. Zapisujemy liczbę 27 na 8bitach
1 1 1 0 0 1 0 0
2. Zamieniamy bity

1 1 1 0 0 1 0 1
3. Dodajemy 1 i mamy -27 w U2
Natomiast 10101001U2 = -27+(25+23+1) = -128+41 = -87
3.2.3. Liczby rzeczywiste.

Zapis stałopozycyjny.
Do zapisu liczby stałoprzecinkowej przeznaczona jest z góry określona ilość bitów, a pozycję przecinka ustala się
arbitralnie, w zależności od wymaganej dokładności, wolne bity uzupełniając zerami. Do reprezentacji liczb ze
znakiem stosuje siejże kod U2.
Np. Liczba 6,25=110,01(2) zapisana na 8 bitach gdy część ułamkowa zajmuje 3 najmłodsze bity, ma postać:
0
0
1
1
0
0
część całkowita
1
0
część ułamkowa
Natomiast liczba -6,25=-110,01(2) zapisana w powyższym formacie w kodzie U2, ma postać:
1
1
0
0
1
1
1
0
str. 7

Zapis zmiennopozycyjny.
Liczba zmiennoprzecinkowa jest komputerową reprezentacją liczb rzeczywistych zapisanych w postaci wykładniczej o
podstawie 2. Na zajęciach będziemy stosowali następującą notację:
z M 2C
S
gdzie:
z
M
C-S
C
S
-
znak liczby
znormalizowana mantysa (liczba ułamkowa spełniająca warunek: 1 M<2)
wykładnik (liczba całkowita)
spolaryzowana cecha (liczba całkowita umownie zwana cechą)
stała (liczba całkowita BIAS zależna od danej implementacji – rozwiązuje problem znaku wykładnika)
Uwaga:
 Powszechnie w procesorach i oprogramowaniu obliczeniowym wykorzystuje się binarny zapis
zmiennopozycyjnym zgodnym ze standardem IEEE754
(np. format 32-bitowy z polami: b31-znak, b23..30-cecha, b0..22-mantysa).
W przedstawieniu tym cecha, która jest ciągiem zer (albo ciągiem jedynek) nadaje kodowi specjalne
znaczenie, np.
01111111100000000000000000000000 +
00000000000000000000000000000000 0
Gdy cecha jest ciągiem zer mantysa jest zdenormalizowana tzn. 0,5 M<1
Ze względów dydaktycznych będziemy stosowali uproszczone formaty.
 Używając formatu zmiennopozycyjnego należy pamiętać o takich zagadnieniach jak: zakres (problem z
przepełnieniem i niedomiarem), zaokrąglanie, kolejność wykonywania działań (nie ma np. łączności)
 Liczbę, którą można dokładnie zapisać w danym formacie nazywamy liczbą maszynową.
Np.
Załóżmy, że operujemy następującym zmiennopozycyjnym formatem zapisu liczby rzeczywistej:
 na zapis przeznaczamy 16 bitów.
 najstarszy bit (b15) to bit znaku (będziemy stosować kod ZM),
 kolejne 6 bitów (b9-b14) to mantysa
 pozostałe bity (b0-b8) są przeznaczone na zapis cechy.
 przyjmijmy, że S=9.
Przedstawimy liczbę +0,0224609375 w powyższym formacie. Naszą liczbę zapisujemy w systemie binarnym w
postaci wykładniczej o podstawie 2:
0,0224609375 = 0,0000010111(2) = 1,0111(2) 2-6 = 1,0111(2) 23-9 = +1,0111(2) 211
-S
(2)
Oto liczba 0,0224609375 zapisana w zadanym formacie:
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
1
3.3. Kontrola transmisji danych

Bit parzystości

Suma kontrolna

CRC
http://wazniak.mimuw.edu.pl/index.php?title=MN03
str. 8
Zadania
z.3.1. Rozkoduj obraz:
a) 5X16 pikseli o głębi 1b/pix zakodowany kodem ASCII: &f UU Ue UW &U
z.3.2. Uzupełnij tabelkę (do zapisu liczb w kodzie ZM i U2 użyj minimalnej wielokrotności 8 bitów) :
(10)
1947
-1947
ZM
U2
01001110
11001110
01001101
11001101
z.3.3. Podaj zakres liczb całkowitych jakie można zapisać na 8 bitach:
a) w kodzie ZM
b) w kodzie U2
z.3.4. Uzasadnij, że liczba -1 w kodzie U2 jest reprezentowana zawsze jako ciąg jedynek.
z.3.5. Rozkoduj ciąg 10010001 zapisany w formacie stałopozycyjnym 8bitowym:
a) b0..5 – część całkowita, b6..7 – część ułamkowa (bez znaku)
b) b0..2 – część ułamkowa, b3..7 – część całkowita (bez znaku)
c) b0..2 – część ułamkowa, b3..6 – część całkowita, b7-znak (ZM)
d) b0..2 – część ułamkowa, b3..7 – część całkowita (U2)
z.3.6. Zapisz liczbę -112,09375 w 16bitowym formacie stałopozycyjnym:
a) b0..7 – część ułamkowa, b8..14 – część całkowita, b15-znak (ZM)
b) b0..7 – część ułamkowa, b8..15 – część całkowita (U2)
z.3.7. Podaj zakres i dokładność liczb jakie można zapisać w formacie stałopozycyjnym 8bitowym (bez znaku):
a) gdy część ułamkowa zajmuje 2 najmłodsze bity
b) gdy część ułamkowa zajmuje 5 najstarszych bitów
z.3.8. Zapisz w 16 bitowym formacie zmiennopozycyjnym: b15-znak, b14..7-znormalizowana mantysa, b6..0
spolaryzowana cecha przy S=20:
a) 9,1875
c) 503
b) 0,09375
d) -9,09375
z.3.9. Rozkoduj ciąg 10010001 zapisany w formacie zmiennopozycyjnym 8bitowym:
a) b7-znak, b6..3-znormalizowana mantysa, b0..2 spolaryzowana cecha przy S=8
b) b7-znak, b6..3-znormalizowana mantysa, b0..2 spolaryzowana cecha przy S=10
c) b0-znak, b7..4-znormalizowana mantysa, b1..3 spolaryzowana cecha przy S=10
d) b0-znak, b1..3-znormalizowana mantysa, b4..7 spolaryzowana cecha przy S=10
z.3.10. Podaj zakres jaki uzyskamy kodując liczby w formacie zmiennopozycyjnym 8 bitowym: b7-znak, b6..3znormalizowana mantysa, b0..2-spolaryzowana cecha przy S=8.
z.3.11. Wypisz i zaznacz na osi wszystkie liczby jakie można zakodować na 4 bitach w formacie zmiennopozycyjnym gdy
najstarszy bit jest bitem znaku, dwa następne bity są bitami spolaryzowanej cechy o stałej S=1, a najmłodszy bit jest
bitem znormalizowanej mantysy.
z.3.12. Określ, która z liczb jest liczbą maszynową, która z przepełnienia a która z niedomiaru gdy zapisane są w
formacie „zccmm” i są zapisane bez zastrzeżenia o cechach będących ciągiem jedynek i denormalizacji mantysy:
a) 2
c) -20
b) 0,2
d) -2,2
z.3.13. Dane słowa 8bitowe mają dodaną odpowiednią sumę kontrolną. Określ, które uległy zniekształceniu
a) 110111011
c) 01011101011
b) 0101110111
d) 0101110100
str. 9
Download