Andmed arvuti mälus Bitid ja baidid
A bit about bit Bitt, (ingl k bit) on info mõõtmise ühik, tuleb mõistest binary digit nö kahendarv kahe võimaliku väärtusega 0 ja 1. Saab näidata kahte võimalikku olekut (2 1 ) Bittidest moodustatakse kombinatsioone: Nibble on 4 bitti (olekuid 2 4 ) Bait (byte) on 8 bitti (olekuid 2 8 ) Ristiisa 1956 a. dr. Werner Buchholz (töötas IBM-is). Sõna (word) on 16 bitti (olekuid 2 16 ) Arvutis peetakse tavaliselt mõistlikuks adresseerimisühikuks baiti.
Milleks seda vaja on? Milleks on mõistlik teada, kuidas arvuti andmeid meeles peab? Ma ei hakka ju neid käsitsi kuhugi graveerima! Kui suur saab olla arv, mida arvuti suudab õigesti salvestata? Millise täpsusega arvuti arvutab ja kui palju me teda usaldada võime? Kuidas hoida arve nii, et arvutusi oleks lihtsam realiseerida? Kui palju mälu muutujate jaoks kasutusse läheb?
Kooditabelid (1) Kõik on arvutis salvestatud 2nd-koodis. Teksti salvestamiseks tuleb kõik sümbolid kodeerida, panna talle vastavusse numbriline väärtus On erinevad kooditabelid, kus sama sümbol on kodeeritud erinevalt, näit ASCII, EBCDIC jne http://www.asciitable.com/, http://en.wikipedia.org/wiki/ebcdic ASCII (American Standard Code for Information Interchange) Iga sümboli kodeerimiseks on 1 bait, tabelis on 2 8 =256 erinevat sümbolit. Algses versioonis (1963) oli 7 bitti, st 127 sümolit Laiendatud tabeli osa võib olla erinev.
Kooditabelid (2) Unicode standard püüab ühtlustada erinevaid kodeeringuid (http://en.wikipedia.org/wiki/unicode) Tabelisse on reserveeritud 2 20 + 2 16 = 1 114 112 positsiooni. Esimesed 256 on vastavuses ISO 8895-1-ga, tuntuima ASCII laiendusele tugineva tabeliga. Kogu tabelist eraldatakse osasid (kõiki sümboleid pole korraga tarvis) ja selliselt saadakse nt UTF-8, UTF-16 jne kodeeeringud.
Märgitüüp Char märgitüüp Pascal keeles. Märgitüüpi muutuja võtab mälu 1 bait. Sümbolid salvestatakse ASCII-koodide järgi. Kokku 256 erinevat väärtust. Täht a. Tema kood on 97 10 ehk 61 16 ehk 01100001 2. St a salvestatakse mälupesadesse kujul 01100001. Number (märgina!!) 1: kood 49 dec = 31 hex = 00110001 bin
Täisarv - integer (1) Positiivne täisarv salvestatakse kahendarvuna 16- le bitile. Esimene bitt on märgi jaoks, ülejäänud 15 bitti arvu jaoks. Seega suurim positiivne väärtus, mida integer esitada lubab on 2 15 = 32 767. Ja vähim negatiivne täisarv on 32 768. Millest tuleb erinevus 1 võrra selgub kohe.
Täisarv (2) Mida teha negatiivsete täisarvudega? Täisarvude esitamise võimalused: Märgita esitus (Unsigned integer representatsion) - mittenegatiivse täisarvu esitamine positsioonilises kahendsüsteemis. Märk suurusjärguga (Sign magnitude) - 1. bitt (MSB) määrab märgi (0 +, 1 -), ülejäänud bitid annavad suurusjärgu tavalises kahendsüsteemis.
Täisarv (2) Täiendesitus (Complement representation) - positiivsed täisarvud on kahendkujul, 1. bitis on 0. Esimene täiendväärtus (One's complement): 1. bitis on neg. arvudel 1 ja teised bitid pööratakse ringi. Teine täiendväärtus (Two's complement) saadakse 1. täiendväärtusele 1 liitmisel. Esitus nihkega (Biased representation) - arvud kujutatakse kui positiivsed märgita arvud, arvu M tegelik väärtus leitakse M-nihe (bias). Nihe on N-bitise arvu korral 2 N-1 või 2 N-1-1.
Täiendväärtuse leidmine. Näide. Olgu meil 4-bitine arv, millest 1 bitt on märgi jaoks: 101 2 (5 10 ). Lisades ette pos märgibiti 0 saame: 0101 Esimene täiendväärtus (märgibitti 1, teised ringi): 1010 Teine täiendväärtus (liidame 1): 1011 Liida kokku ja vaata, kas tuleb 0? (kui bitid ei mahu ära kukvad nad üle serva ).
Täiendväärtusega arvud Järgmises tabelis on positiivsed ja negatiivsed 3-bitised arvud. Esimeses reas bitid, teises ja kolmandas reas nende tõlgendused vastavalt 1. ja 2. täiendväärtusena. Nulle on üks ja seepärast on ka negatiivseid arve ühe võrra rohkem. bitid: 100 101 110 111 000 001 010 011 1. täiendv.: -3-2 -1 0 0 1 2 3 2. täiendv.: -4-3 -2-1 0 1 2 3
Märgita täisarv Pascal-is kasutatakse märgita täisarve (ainult positiivsed arvud) järgmiselt: Byte suurus 1bait Word suurus 2 baiti Cardinal suurus 4 baiti Qword suurus 8 baiti
Märgiga täisarv Integer väike täisarv (smallint) Pascalis. Võtab mälu 2 baiti, kokku 2 16 =65 536 võimalust Täisarvu piirid -32 768.. +32 767 Kasutatakse esitust teise täiendväärtusena, sest see tagab mugava aritmeetika nii positiivsete kui ka negatiivsete arvudega. Longint mälu võtab 4 baiti, piirid on -2147483648.. 2147483647 Int64 mälu võtab 8 baiti, piirid on -9223372036854775808.. 9223372036854775807
Ar(v)utame! Kasutame 4-bitiseid täisarve (st 1 bitt märgile ja 3 arvule). Sama asi toimub ka 16-bitise arvuga jne Mis on ja kuidas tekib täisarvu ületäitumine? Liida 5 + 6 2ndarvudena! Mis on tulemus? Kuidas 2. täiendväärtuse kasutamine pos ja neg arve mugavalt liita lubab? Liida -5 ja 3: Leia arvu -5 teine täiendesitus ja liida sellele 3. Mis on tulemus?
Reaalarvud Reaalarvud ei ole täpsed ja ei ole diskreetsed, vaid täidavad lünkadeta kogu arvusirge. Esitamiseks on kaks peamist võimalust (kasutades IT terminoloogiat): Püsikomaarvud (Fixed-point) koma paikneb arvus oma õigel kohal Ujukomaarvud (Floating-point) määratakse tüvenumbrid, koma tegeliku asukoha määrab 10 aste Arvuti sees on osutunud paremini kasutatavaks ujukomaesitus.
Ujukomaarvud Ujukomaarv koosneb: märgist (0 positiivne, 1 negatiivne); mantissi absoluutväärtusest (kahendarvuna, annab täpsuse, koma paikneb kokkuleppeliselt vasakult 1. ja 2. positsiooni vahel); astme suurusest - eksponendist (nihkega esitus, et kasutada nii positiivset kui ka negatiivset astet, aste=tegelik_aste + nihe)
Ujukomaarv arvutis IEEE standardi 754 järgi on kaks varianti: lihttäpsusega reaalarv (single precision): suurus 32 bitti (1 bitt märgile, 8 bitti eksponendile nihe 127, 23 bitti mantissile) piirid: 1.5E-45.. 3.4E38 täpsus: 7-8 kohta topelttäpsusega reaalarv (double precision): suurus 64 bitti (1 bitt märgile, 11 bitti eksponendile nihe 1023, 52 bitti mantissile) piirid: 5.0E-324.. 1.7E308 täpsus: 15-16 kohta
Reaalarvulised andmetüübid Pascalis on kasutusel järgmised andmetüübid: Single 4 baiti, piirid 1.5E-45.. 3.4E38, täpsus 7-8 Real 8 baiti, piirid 5.0E-324.. 1.7E308, täpsus 15-16 Double 8 baiti, piirid 5.0E-324.. 1.7E308, täpsus 15-16 Extended 10 baiti, piirid 1.9E-4951.. 1.1E4932, täpsus 19-20
Reaalarvust veel Kui komakohtade arv kokku leppida, siis saadakse püsikoma esitus. Arvu püsikomaarvuna esitades tavaliselt ümardatakse. Arvutades väga suurte ja väikeste arvude kokkupanemisel tekivad kindlasti ebatäpsused, kuid need võivad tekkida ka sama suurusjärku arvude puhul (1,000000000000000000 ja 0,999999999999999999999). Täpsed arvud on ainult täisarvud.
Andmetüüpide võrdlus Sama väärtust erinevate andmetüüpidena esitades hoitakse neid mälus täiesti erinevalt. Näide: 3 mälus Char: 00110011 Integer: 0000000000000011 Real: kolm osa: märgibitt 0; mantissi kohal piisav arv 0-e ja siis 11 et tekiks tüvenumbriteks 3,0000000000; eksponent peab andma 10 astme 2ndarvuna ja nihkega