Bitti ja tavu

Tietotekniikassa tiedon tallennusmuoto on tavu. Mutta mikä on tavu? Tavu koostuu biteistä. Bitti on tiedon alkeellisin tallennusmuoto. Koska tietokone koostuu sähkökomponenteista, niin bitillä voidaan kuvata tilaa, jossa joko virta kulkee (1) tai ei kulje (0). 1-bittisessä jonossa on kaksi tilaa eli se käsittää vain tilat 0 tai 1.

2-bittisessä jonossa on 22 = 4 tilaa. Mahdollisia kahden bitin jonoja voidaan kuvata nollalla tai ykkösellä, jossa kaikki mahdolliset tilat ovat 00, 01,10 tai 11. Vastaavasti 3-bittisessä jonossa on 23 = 8 tilaa eli tilat ovat 000, 001, 010, 100, 101, 110, 011 ja 111. Näin voimme jatkaa eli 4-bittisessä jonossa on 24 = 16 tilaa, 5-bittisessä jonossa on 25 = 32 tilaa jne.

Bittisyys
BittisyysTilojen lkm
1 21 = 2
2 22 = 4
3 23 = 8
4 24 = 16
5 25 = 32
6 26 = 64
7 27 = 128
8 28 = 256

1 tavu tietoa on esitetty 8-bittisen jonon avulla eli 8-bittisessä jonossa on 28 = 256 erilaista tilaa. Siis 256 erilaista 0:n ja 1:n muodostamaa jonoa, jonka pituus on kahdeksan bittiä. Esimerkiksi A-kirjain on koodattu numeroksi 65 ja tätä vastaa binaariluku 01000001, vastaavasti B-kirjain on koodattu numeroksi 66 ja tätä vastaa binääriluku 01000010. Binääriluvuissa käytössä on myös 0-bitti. Perusmerkit kuvattiin aluksi 27 = 128 eri tavalla, kun laskeminen lähtee alusta eli nolla-bitistä. Näitä perusmerkkejä nimitetään ASCII-merkeiksi. Tosin merkkejä ei ole ollut riittävästi vaan tähän on tehty laajennos, jossa on 128 merkkiä lisää. Yhteensä laajennoksen kanssa merkkejä on 256 eli ne voidaan kuvata 8-bitin avulla. Suomessa käytössä on ISO 8859-1 (Latin 1) laajennus, joka sisältää myös meidän tarvitsemat ääkköset. Koska ääkköset puuttuvat perus ASCII-merkeistä, niin se on syy miksi esimerkiksi ohjelmoinnissa et voi käyttää muuttujien nimissä kirjaimia ä, ö ja å. Lisätietoa ASCII-merkeistä löydät tästä linkistä: http://www.ascii-code.com/




Kuvassa on esitetty yksi mahdollinen jono 256:sta erilaisesta jonosta, jonka pituus on 8 bittiä. Tämä jonon avulla voidaan kuvata esimerkiksi luku 65 tai yksittäinen merkki (A-kirjain). Käytännössä 256 erilaista jonoa ei riitä käsittämään kaikkia tarvittavia merkkejä, siksi käytössä on lisäksi 16 bittinen Unicode-merkkitaulukko. Unicode-merkkitaulukossa erilaisia merkkejä voi olla 164 = 65 536. Unicode-merkit on koodattu käyttäen heksalukuja eli 16 kantaisia lukuja. Käytännössä myös tämä määrä on osoittautunut liian pieneksi, jolloin Unicode 2-merkit ovat jo 21-bittisiä.

Mitä ovat heksaluvut? Heksaluvut ovat 16-kantaisia lukuja. Koska numeroita on käytössä vain nollasta yhdeksään asti, niin sen jälkeen käytetään kirjaimia A, B, C, D, E ja F. Kirjainta A vastaa numero 10, kirjainta B vastaa numero 11, kirjainta C vastaa numero 12, kirjainta D vastaa numero 13, kirjainta E vastaa numero 14 ja kirjainta F vastaa numero 15. Koska numerot lähtevät nollasta, niin numeroita on yhteensä 16 kappaletta. Heksaluvut voidaan ilmaista myös neljän bitin avulla seuraavasti.

Heksaluvut
BINHEXBINHEX
0000 0 1000 8
0001 1 1001 9
0010 2 1010 A
0011 3 1011 B
0100 4 1100 C
0101 5 1101 D
0110 6 1110 E
0111 7 1111 F

Tämä on sama kuin 24 = 16. Jos neljällä bitillä voidaan ilmaista yksi heksaluku, niin kahdeksalla bitillä saadaan ilmaistua kaksi heksalukua. Koska muunnos on näin helppo, heksalukuja käytetään ohjelmoinnissa yleisesti. Edellisessä esimerkissä A kirjainta vastasi 10-järjestelmän luku 65. Tätä vastaa binääriluku 01000001 eli kun tämä luku jaetaan kahtia, niin saadaan 4-bittiset luvut 0100 = 4 ja 0001 = 1. Katso arvot taulukosta. A-kirjainta vastaa siis heksaluku 41. Unicode-merkkinä tämä olisi: \u0041.

Yhteenvetona todettakoon, että Processing-ohjelmoinnissa A-kirjain voidaan tulostaa, joko ASCII-merkkinä 10-kantalukujärjestelmän lukuna 65 komennolla: text(char(65),10,30); tai Unicode-merkkinä 16-kantalukujärjestelmän lukuna 41 komennolla: text("\u0041",10,30); Mutta helpoin tapa on tietysti: text("A",10,30);



Windowsin mukana tuleva laskin osaa muuttaa 10-järjestelmän luvut binääriluvuksi ja heksaluvuksi. Myös Processing-ohjelmassa on funktiot binary() ja hex(), jotka osaavat muuttaa 10-järjestelmän luvun binääriluvuksi ja heksaluvuksi. Tee esimerkiksi seuraavanlainen ohjelma.

// Ohjelman tehnyt e-Oppi Oy
//18.2.2017
void setup() {
size(600,300); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Tekstin väri musta
textSize(24); // Tekstin koko }
void draw() {
int luku = 65; // Muuta tähän tutkittava luku.
text("Lukua "+luku+ " vastaava binääriluku on ",10,50);
text(binary(luku),10,100);
text("Lukua "+luku+ " vastaava hexaluku on ",10,150);
text(hex(luku),10,200); }

Eli jos kirjoitat puhtaan tekstitiedoston, jossa on yksi kirjain, niin sen koko on 1 tavu tietoa. Tämä yksi kirjain on esitetty yhdellä 8-bittisellä tilalla.



Esimerkiksi muistio on ohjelma, joka käyttää ASCII-merkkejä tiedon tallennukseen. Tässä muistioon on kirjoitettu kymmenen merkkiä, jolloin tallennetun tiedoston koko on 10 tavua. Huomaa, että tekstinkäsittelyohjelmissa on paljon piilotettuja tekstinmuotoilukomentoja, jotka myös vievät muistia. Lisäksi tekstinkäsittelyohjelmat käyttävät yleensä Unicode-merkistöä, jossa tarvitaan enemmän tallennustilaa. Sama tiedosto Wordilla vie helposti jo tuhansia tavuja. Ohjelmoinnissa käytetään tekstieditoreita, jotka käsittelevät merkkejä 8 bittisinä ASCII-merkkeinä. Tekstinkäsittelyohjelmat (Word, Writer) eivät yleensä tee näin ja siksi ne eivät sovellu tietokoneohjelmien kirjoittamiseen.

1 tavu tietoa voi tarkoittaa joko numeroa, merkkiä tai vaikka väriarvoa, joka on koodattu 8 bitin avulla. Esimerkiksi värit on koodattu kolmen päävärin avulla. Nämä päävärit ovat punainen (R = red), vihreä (G = green) ja sininen (B = blue). Tästä tulee nimitys RGB-värit. Koska jokainen pääväri on 8-bittinen, niin yhden värisävyn muodostamiseen tarvitaan 3 kappaletta 8-bittisiä päävärejä. Erilaisia värisävyjä voimme muodostaa näiden kolmen päävärin avulla 256 ∙ 256 ∙ 256 = 16 777 216 eli yli kuusitoista miljoonaa värisävyä. Koska myös 224 = 16 777 216, niin siksi tällaista kuvaa nimitetään 24-bittiseksi kuvaksi. Kun bittikarttakuvaa suurentaa, niin kuva muodostuu pisteistä. Näitä pisteitä nimitetään pikseleiksi. Pikseli on siis kuvan pienin yksittäinen osa. Kuvatiedosto, joka koostuu yhdestä pikselistä vie siis tallennustilaa 3 tavua, johtuen kolmesta pääväristä. Tästä on helppo laskea kuvan koko. Jos kuvan koko on 450 pikseliä vaakaan ja 450 pikseliä pystyyn, niin kuva koostuu 450 ∙ 450 = 202 500 pikselistä. Koska jokainen pikseli vie muistia 3 tavua, niin kuvatiedoston kooksi tulee 607 500 tavua. Oletko joskus ihmetellyt miksi kuvatiedostot ovat suuria verrattuna tekstitiedostoon. Tässä selitys.

Myös tietokoneen tai tabletin näyttö koostuu pikseleistä. Processing-ohjelmoinnissa komennolla size(x,y); määrätään ikkunan koko pikseleinä, joka on myös samalla käytettävissä olevan koordinaatiston koko. Kirjoittamasi ohjelma on vain tekstitiedosto, joten tallentamasi ohjelman koko määräytyy vain tekstitiedostossa olevien merkkien mukaan. Mutta kun suoritat ohjelman, niin piirtokomennot tulostuvat siihen ikkunaan, jonka olet määritellyt size(x,y)-komennolla.

Kymmenluku-järjestelmässä on käytössä etuliitteet k = kilo = tuhat, M = mega = miljoona, G = giga = miljardi. Nämä etuliitteet ovat käytössä myös tiedon tallennuksessa. Lähinnä lukua tuhat oleva luvun 2 potenssi on 10 eli 210 = 1024. Tietotekniikassa 1 kilotavu ei siis tarkoita 1000 tavua, vaan 1024 tavua. Vastaavasti 1 megatavu on 1024 kilotavua eli 1 megatavu = 1024 ∙ 1024 tavua= 1 048 576 tavua. Samoin 1 gigatavu = 1024 megatavua eli 1 gigatavu = 1024 ∙ 1024 ∙ 1024 = 1 073 741 824 tavua.

Sekaannusta aiheuttaa, että englannissa tavu on nimeltään byte. Suomessa tavun lyhenne on t, mutta englannissa B. Vastaavasti bitti on englannissa bit, jonka lyhenne on b.

Vertailu
yksikkölyhenne, GBlyhenne, FItavutbitit
bitti b b, bit   1 b
tavu B t 1 B 8 b
kilotavu kB kt 210 B =1024 B 1024 ∙ 8 b
megatavu MB Mt 220 B = 1 048 576 B 1 048 576 ∙ 8 b
gigatavu GB Gt 230 B = 1 073 741 824 B 1 073 741 824 ∙ 8 b

Internetin tiedonsiirtonopeudet usein ilmoitetaan yksikössä bit/s tai bps (bits per second). Kannattaa huomata, että yksikkö 1 Mbps ei tarkoita samaa kuin yhden megatavun kuvatiedosto siirtyisi sekunnissa. Koska yksi tavu on kahdeksan bittiä, silloin 1 Mbps = 128 tavua/s ja kun vielä muistat, että yhteen kuvapikseliin tarvitaan kolme tavua (24-bittinen kuva), niin sekunnissa siirtyisi kuva, jonka koko on noin 43 pikseliä nopeudella 1 Mbps. Yksikköä 1 Mbps käytetään lähinnä markkinamielessä. Parempi yksikkö tiedonsiirrolle olisi Mt/s.