2 paskaita: duomenų formatai ir veiksmai su įvairių tipų duomenimis

Download Report

Transcript 2 paskaita: duomenų formatai ir veiksmai su įvairių tipų duomenimis

KOMPIUTERIŲ
ARCHITEKTŪRA ir
OPERACINĖS SISTEMOS
Doc. Stasys Maciulevičius
Kompiuterių katedra
[email protected]
Pirmosios paskaitos santrauka
 apie mūsų kursą
 kompiuterių vystymasis – darbo spartos
didinimas
 kas lemia bendrąją kompiuterių darbo
spartą
 von Neuman'o ir Harvardo architektūros
 komandos vykdymo procesas
 kompiuterių struktūrų vystymasis
 kompiuterių įvairovė
2009-2013
S.Maciulevičius
2
Šios paskaitos turinys
 duomenų kodavimas
 perėjimas iš vienos skaičiavimo sistemos į
kitą
 sveikieji skaičiai
 slankaus kablelio skaičiai; standartas IEEE 754
 dešimtainiai skaičiai
 simbolių kodavimas
2009-2013
S.Maciulevičius
3
Informacijos tipai kompiuteriuose
Jau minėjome, kad n skilčių dvejetainis žodis kompiuteryje
atitinka tokius informacijos tipus:
 duomenis (skaičius, dvejetainius vektorius ar
simbolius),
 komandas,
 atminties lastelių arba įvesties ir išvesties įtaisų
adresus.
Šiuolaikiniuose kompiuteriuose galima sutikti ir kitokius
informacijos tipus:
 tegus (tags) - bitų grupes, kurios nurodo palydimos
informacijos tipą;
 informacijos vienetų deskriptorius;
 informacijos vienetų identifikatorius (vardus).
2009-2013
S.Maciulevičius
4
Skaičių kodavimas
Skaičiai gali būti:
 sveikieji,
 slankaus kablelio,
 dešimtainiai,
Kodavimo (pateikimo) prasme skaičiai gali būti
dvejetainiai, šešioliktainiai, aštuntainiai:
 kompiuterių viduje – dvejetainiai skaičiai
 įvedant ar išvedant duomenis (jų interpretavimui) –
dvejetainiai, šešioliktainiai, aštuntainiai
2009-2013
S.Maciulevičius
5
Pozicinės skaičiavimo sistemos
Mes naudojame pozicines skaičiavimo
sistemas, kuriose kiekvienas skaitmuo
skaičiuje turi tam tikrą svorį. Todėl
sveikajam skaičiui A rašome:
A = am-1am-2…a2a1a0 =
am-1.pm-1+am-2.pm-2 +… +a2.p2+a1.p1+a0.p0;
Čia p – skaičiavimo sistemos pagrindas, o ai –
skaitmuo i-ojoje pozicijoje
Taigi, 1847 = 1.103 + 8.102 + 4.101 + 7.100
2009-2013
S.Maciulevičius
6
Pozicinės skaičiavimo sistemos
Dar kartą pažiūrėkime į išraišką:
A = am-1.pm-1+am-2.pm-2 +…+a2.p2+a1.p1+a0.p0;
Jeigu šį skaičių padalinsime iš p (skaičiavimo
sistemos pagrindo), gausime sveikąją dalį
am-1.pm-2 + am-2. pm-3 +…+a2.p1+a1.p0 ir liekaną a0.
Gautąją sveikąją dalį vėl padalinę iš p, gausime
sveikąją dalį am-1.pm-3+am-2.pm-4 +…+a2.p0 ir
liekaną a1.
Vadinasi, norėdami rasti skaičiaus A užrašą kurioje
nors skaičiavimo sistemoje, turime nuosekliai A
dalyti iš tos sistemos pagrindo ir fiksuoti
gautąsias liekanas
2009-2013
S.Maciulevičius
7
Į dvejetainę sistemą (sveikieji skaičiai)
10810 = ?2 = ?8 = ?16
108
54 0
27 0
13 1
6 1
3 0
1 1
10810 = 11011002
2009-2013
A nuosekliai daliname iš
2 (sistemos pagrindo) ir
fiksuojame gautąsias
liekanas
Po to užrašome visus
skaitmenis, pradedant
paskutiniuoju sveikuoju
skaitmeniu, atvirkščia
skaičiavimui tvarka
S.Maciulevičius
8
Dešimtainių ir aštuntainių skaitmenų
dvejetainiai ekvivalentai
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
2009-2013
0101 = 22+20 =
4+1 = 5
S.Maciulevičius
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
9
Į aštuntainę, šešioliktainę sistemą
(sveikieji skaičiai)
108 8
4 13
5
8
1
10810 = 1548
10810 = 1 101 1002
1 5 4
Sugrupuokime taip:
10810=110 11002 = 6C16
6
2009-2013
C
S.Maciulevičius
1001 = 9
1010 = A
1011 = B
1100 = C
1101 = D
1110 = E
1111 = F
108 16
96 6
12
10
Iš dvejetainės į dešimtainę (sveikieji
skaičiai)
11011002 = ?10
A = an-1dn-1 + an-2dn-2 + … + a3d3 + a2d2 + a1d1 + a0d0
1 1 0 1 1 0 02
n=6 5 4 3 2 1 0
11011002 = 26 + 25 + 23 + 22 = 64+32+8+4 = 108
Galima eiti per tarpinę – aštuntainę – sistemą:
11011002 = 1548 = 182 + 581 + 480 = 64+40+4 =
108
2009-2013
S.Maciulevičius
11
Iš dvejetainės į dešimtainę (sveikieji
skaičiai)
11011002 = ?10
A = an-1dn-1 + an-2dn-2 + … + a3d3 + a2d2 + a1d1 + a0d0
A = d(an-1dn-2 + an-2dn-3 + … + a3d2 + a2d1 + a1) + a0 =
= d(d(an-1dn-3 + an-2dn-4 + … + a3d1 + a2) + a1) + a0 = …
= d(d(d(…d(an-1d + an-2) + … + a3) + a2) + a1) + a0 =
= (((…((an-1d + an-2)d + an-3)d + … + a3)d + a2)d + a1)d + a0
11011002 = (((((12+1) 2+0) 2+1) 2+1) 2+0) 2+0 =108
3
6
13
27
54
2009-2013
S.Maciulevičius
12
Truputį praktikos ...
 Dabar – 2013 metai. Pažiūrėkime, kaip šis
skaičius atrodys dvejetainėje formoje:
2013
1006
503
251
125
62
31
15
7
3
1
1
0
1
1
1
0
1
1
1
1
2009-2013
2013 = 11111011101
S.Maciulevičius
13
Truputį praktikos ...
 Pažiūrėkime, kaip skaičius 2013 atrodys
aštuntainėje formoje:
2013 8
201310 = 37358
16
251 8
41 24 31 8
40
11 24 3
13
8 7
8
3
5
2009-2013
S.Maciulevičius
14
Truputį praktikos ...
 Pažiūrėkime, kaip skaičius 2013 atrodys
šešioliktainėje formoje:
2013 16
16
125 16
41 112 7
32
13
93
80
13
2009-2013
201310 = 7(13)(13)16 = 7DD16
S.Maciulevičius
15
Truputį praktikos ...
 Taigi, skaičius 2013 įvairiose skaičiavimo
sistemose atrodo taip:
 201310 = 11111011101
 201310 = 37358
 201310 = 7DD16
3
7
3
5
11111011101
7
2009-2013
D
D
S.Maciulevičius
16
Dvejetainės, aštuntainės, …
trupmenos
O dabar užrašykime trupmeninio skaičiaus išraišką:
A = a-1.p-1+a-2.p-2 +a-3.p-3 + … (pvz., A = 0,1011…2).
Jeigu šį skaičių padauginsime iš p (skaičiavimo sistemos
pagrindo), gausime sveikąją dalį a-1 ir trupmeną
a-2.p-1+a-3.p-2 +… (pvz., 2 0,1011…2 = 1,011…2;
sveikoji dalis 1 ir trupmena 0,011…).
Gautą sveikąją dalį vėl padauginę iš p, gausime sveikąją
dalį a-2 ir trupmeną a-3.p-1+a-4.p-2 +… (pvz., 20,011…
= 0,11…2; sveikoji dalis 0 ir trupmena 0,11…).
Vadinasi, norėdami rasti trupmenos A užrašą kurioje nors
skaičiavimo sistemoje, turime nuosekliai dauginti A ir
gautąsias trupmenines dalis iš tos sistemos pagrindo ir
fiksuoti gautąsias sveikąsias dalis.
2009-2013
S.Maciulevičius
17
Dvejetainės trupmenos
Pabandykime į dvejetainę sistemą paversti
0,3125. Praktiškai tai patogu rašyti taip:
0,
0,
1,
0,
1,
3125 - dvigubiname trupmeninę dalį
625
25
5
0 – trumeninė dalis tapo lygi 0, todėl
daugybą baigiame
Atsakymas: 0,312510 = 0,01012.
2009-2013
S.Maciulevičius
18
Dvejetainės trupmenos
Įdomu tai, kad paprasta dešimtainė trupmena
dvejetainėje sistemoje gali tapti periodine.
Pavyzdžiui, paverskime 0,1:
0, 1
0, 2
0, 4
0, 8
1, 6
1, 2
0, 4 – sveikoji ir trumeninė dalys pradėjo
kartotis, todėl daugybą baigiame
Atsakymas: 0,110 = 0,0(0011)2.
2009-2013
S.Maciulevičius
19
Aštuntainės trupmenos
O dabar tą pačią trupmeną 0,3125 paverskime į aštuntainę
sistemą. Praktiškai tai patogu rašyti taip: dauginame iš 8
0, 3125  8 =
2, 5  8 =
4, 0 – trumeninė dalis tapo lygi 0, todėl daugybą
baigiam
Atsakymas: 0,312510 = 0,248.
Galima pereiti ir per dvejetainę sistemą tokiu būdu:
0,312510 = 0,01012 = 0,010 1002 = 0,248.
2
2009-2013
4
S.Maciulevičius
20
Sveikieji skaičiai
Sveikieji skaičiai gali būti:
 be ženklo: i7 i6 i5 i4 i3 i2 i1 i0
 su ženklu:
s i6 i5 i4 i3 i2 i1 i0
Diapazonas:
n
8
16
32
2009-2013
Be ženklo
min
max
0
0
0
255
65536
232-1
Su ženklu
min
max
-128
-32768
-231
S.Maciulevičius
127
32767
231-1
21
Neigiamų skaičių kodavimas
Neigiami sveikieji skaičiai gali būti pateikiami
tokiais kodais:
 tiesioginiu,
 atvirkštiniu,
 papildomuoju.
Kodas
Tiesioginis
Atvirkštinis
Papildomasis
2009-2013
A≥0
0.A
0.A
0.A
S.Maciulevičius
A<0
1.A
1.A
1.A+1
22
Neigiamų skaičių kodavimas
Tegul skaičiui koduoti skirtos 8 skiltys.
Pažiūrėkime, kaip tiesioginiu, atvirkštiniu ir
papildomuoju kodais turi būti koduojamai
skaičiai +108 ir -108 (10810=11011002):
Kodas
Tiesioginis
Atvirkštinis
Papildomasis
+108
0.1101100
0.1101100
0.1101100
-108
1.1101100
1.0010011
1.0010100
Papildomajame kode skilčių svorius galima interpretuoti taip:
-128
64
32
16
8
4
2
1
Iš tikrųjų: -128 + 16 +4 = -108
2009-2013
S.Maciulevičius
23
Skaičių ilgio keitimas
Tegul skaičiui koduoti skirtos 8 skiltys.
Pažiūrėkime, kaip jis įrašomas į 16 skilčių turintį
žodį:
Skaičius
Kodas
+108
n=8
n=16
0.1101100
0.000000001101100
-108
Tiesiog.
1.1101100
1.000000001101100
-108
Atvirkšt.
1.0010011
1.111111110010011
-108
Papild.
1.0010100
1.111111110010100
2009-2013
S.Maciulevičius
24
Sveikųjų skaičių sudėtis
Vienos skilties skaičių sudėtis
atliekama taip:
(čia ai, bi – operandai,
ci – pernaša į šią skiltį,
si – suma,
ci+1 – pernaša į
aukštesniąją skiltį)
si
ci+1
Σ
ai bi
2009-2013
ci
ai
bi
ci
ci+1
si
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
S.Maciulevičius
25
Sveikųjų skaičių sudėtis
Ilgų skaičių sudėčiai naudojama schema
(sumatorius), sudaryta iš n vienos skilties
sumatorių:
sn-1
cn
Σ
cn-1
an-1 bn-1
2009-2013
s2
c3
Σ
s1
c2
a2 b2
S.Maciulevičius
Σ
a1 b1
s0
c1
Σ
0
a0 b0
26
Sveikųjų skaičių sudėtis ir atimtis
Kadangi kompiuteryje sudėtį ir atimtį atlieka tas
pats įtaisas (tos pačios schemos), sveikųjų
skaičių atimtis pakeičiama sudėtimi, kai
atėminiui ženklas pakeičiamas priešingu:
Reikalinga operacija
Atliekama operacija
A+B
A-B
-A + B
-A - B
A+B
A + (-B)
(-A) + B
(-A) + (-B)
2009-2013
S.Maciulevičius
27
Sveikųjų skaičių sudėtis
Kompiuteryje sveikųjų skaičių algebrinė sudėtis
atliekama papildomuoju kodu. Sudedant
vienodai interpretuojamos visos skiltys,
įskaitant ženklo skiltį.
Pažiūrėkime, kaip papildomuoju kodu turi būti
sumuojami skaičiai +77 ir -108
(+7710=0.1001101, -10810=1.00101002):
2009-2013
S.Maciulevičius
28
Sveikųjų skaičių sudėtis
+77
-108
- 31
0.1001101
1.0010100
1.1100001
1.1100001 (papild.kodu) =
1.0011111 (ties.kodu) = -31
Pakeiskime operandų ženklus priešingais ir juos
susumuokime; papildomuoju kodu -7710=
1.0110011, o 10810=0.11011002:
1.0110011
0.1101100
Atmetę kairįjį 1, turime
0.0011111= + 31
10.0011111
2009-2013
S.Maciulevičius
29
Sveikųjų skaičių sudėtis
Tegul abu operandai teigiami; 7710= 0. 1001101, o 10810=
0.11011002. Juos susumuokime:
+77
0.1001101
108
0.1101100
185
1.0111001
Gautasis rezultatas rodo, kad suma – neigiamas skaičius.
Aišku, kad taip negali būti.
Atkreipkime dėmesį, kad suma turėtų būti lygi 185, o
maksimalus teigiamas skaičius, kurį galima užrašyti
tokiu formatu – 127. Taigi, turime situaciją, vadinamą
perpildymu.
2009-2013
S.Maciulevičius
30
Sveikųjų skaičių sudėtis
Analogišką vaizdą turėsime, jei sudėsime neigiamus
skaičius
-7710 = 1. 1001101 (ties.kodu) =
1.0110011 (pap.kodu) ir -10810= 1.1101100
(ties.kodu) = 1.0010100 (pap.kodu):
- 77 1.0110011
-108 1.0010100
-185 0.1000111
Gautasis rezultatas rodo, kad suma – teigiamas skaičius. Aišku, kad
taip negali būti.
Atkreipkime dėmesį, kad suma turėtų būti lygi -185, o maksimalus
(abs.verte) neigiamas skaičius, kurį galima užrašyti tokiu formatu
– (-128). Taigi, ir čia turime situaciją, vadinamą perpildymu.
2009-2013
S.Maciulevičius
31
Slankiojo kablelio skaičiai
Slankiojo kablelio skaičiai kildinami iš skaičiaus
užrašymo naudojant mantisę ir eilę. Pavyzdžiui,
skaičių 137,15 galima užrašyti taip:
137,15 = 13,715×101 =
= 1,3715×102 =
= 0,13715×103 =
= 0,013715×104 = ±M×10e .
Čia M - skaičiaus mantisė, o e – jo eilė. Paryškintas
variantas vadinamas normalizuotu. Tokiu atveju
mantisė M turi tenkinti sąlygą
0,1 ≤ M < 1 .
2009-2013
S.Maciulevičius
32
Standartas IEEE 754
Slankiojo kablelio skaičiai šiuolaikiniuose
kompiuteriuose koduojami laikantis standarto
IEEE 754, pagal kurį normalizuoti slankiojo
kablelio skaičiai užrašomi taip :
A = (-1)s × 1,M × 2E-posl
Čia s - skaičiaus ženklo kodas, M - skaičiaus
mantisė, E – jo eksponentė (t.y., perstumta
eilė e: E = posl + e ).
2009-2013
S.Maciulevičius
33
Standartas IEEE 754
Pagrindiniai slankiojo kablelio skaičių formatai
šiuolaikiniuose kompiuteriuose yra tokie :
a) 32 bitų formatas:
s
E
M
b) 64 bitų formatas:
...
s
2009-2013
E
M
S.Maciulevičius
34
Standartas IEEE 754
Skaičiaus ženklo kodui visuomet skiriama
1 skiltis, ir teigiamiems skaičiams
s = 0, o neigiamiems - s = 1
(nes (-1)0 = +1, (-1)1 = -1).
E ir M skilčių skaičius, taip pat posl reikšmė
priklauso nuo skaičiaus ilgio :
n
E skilčių sk.
M skilčių sk.
8
11
23
52
32
64
2009-2013
posl
Maksimalus skaičius
127
1023
1038
10308
S.Maciulevičius
35
Standartas IEEE 754
Pavyzdžiui, skaičių 17,25 galima užrašyti taip:
17,25 = +10001,01 =
= +1,000101×24.
Palyginę su užrašu A = (-1)s × 1,M × 2E-posl,
gauname: s = 0, М = 000101, E-posl = E127=4; t.y., E=127+4=131 (=128+3).
Todėl:
0 1 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 ...
2009-2013
S.Maciulevičius
000
36
Standartas IEEE 754
Kitas pavyzdys.
Skaičių 0,375 galima užrašyti taip:
0,375 = +0,011 = +1,1×2-2.
Palyginę su užrašu A = (-1)s × 1,M × 2E-posl,
gauname: s = 0, М = 1, E-posl = E-127=-2;
t.y., E=127-2=125.
Todėl:
001111101100000
2009-2013
S.Maciulevičius
...
00000
37
Standartas IEEE 754
Pagal šį standartą nenormalizuoti slankiojo
kablelio skaičiai užrašomi taip :
A = (-1)s × 0,M × 2-posl
Tokių skaičių eksponentė lygi 0, o mantisė nenormalizuota
2009-2013
S.Maciulevičius
38
Standartas IEEE 754
Kai kurios slankiojo kablelio skaičių reikšmės
koduojamos specialiai:
Spec. skaičius
+0
-0
+
-
NaN
Nenormaliz.skaičius
Ženklas
0
1
0
Eksponentė
0
0
FF
Mantisė
0
0
0
1
FF
0
0/1
0/1
FF
0
0
0
NaN reikšmės naudojamos operacijų 0/0 ir -1 rezultatams.
2009-2013
S.Maciulevičius
39
Dešimtainiai skaičiai
Dešimtainiai skaičiai dažniausiai pateikiami „pakuota forma“,
kai kiekvienam skaitmeniui skiriami 4 bitai, o skaičiaus
gale koduojamas jo ženklas (dažniausiai kodas 1100
žymi +, o 1101 žymi −)
Tokiu atveju skaičius +127 užims du baitus ir bus pateikiamas
taip:
,
00010010 01111100
o −127 – šitaip:
00010010 01111101
IBM/360 naudojo ir „zoninį formatą“, kai kiekvienam
skaitmeniui buvo skiriami 4+4 bitai („zona“ ir skaitmuo).
Dešinysis baitas – ženklas ir skaitmuo. „Zonos“ kodas 1111
2009-2013
S.Maciulevičius
40
Simbolių kodavimas
Tekstinei informacijai koduoti plačiausiai naudojamas
kodas ASCII (American Standard Code for
Information Interchange). Yra du jo variantai:
1) pagrindinis, kuriame simboliams koduoti skirtos 7
skiltys (aštuntoji skiltis skirta kontrolei);
2) išplėstasis, kuriame simboliams koduoti skirtos 8
skiltys; papildomos kodo kombinacijos skirtos
nacionaliniams ir pseudografikos simboliams.
2009-2013
S.Maciulevičius
41
Simbolių kodavimas
Pagrindinio ASCII kodo fragmentai:
0
1
2
3
4
5
6
0 1 2 3
0
! 1
“ 2
# 3
$ 4
% 5
& 6
2009-2013
4
@
A
B
C
D
E
F
5
P
Q
R
S
T
U
V
6
‘
a
b
c
d
e
f
7
p
q
r
s
t
u
v
8
А
Б
В
Г
Д
Е
Ж
S.Maciulevičius
9
Р
С
Т
Ы
Ф
Х
Ц
A B C D E F
а
└
р
б
┴
с
в
┬
т
г
├
ы
д
ф
е
х
ж
ц
42
Dvejetainė daugyba
Žr. Daugyba.doc
Dvejetainė dalyba - žr. Dalyba.doc
2009-2013
S.Maciulevičius
43