keskiviikko 23. marraskuuta 2016

Tietokone, osa 2: Yhteenlasku

Edellisellä kerralla aloitimme pohjalta tutustumalla loogisiin piireihin ja binäärilukuihin. Tänään siirrymme seuraavalle tasolle: tietokoneemme alkaa käsitellä luonnollisia lukuja ja laskea niitä yhteen.

Tavuja ja sanoja

Koska tietokoneet ovat vain kokoelma loogisia piirejä, niissä on varsin jäykät rajoitukset. Yksi tärkeimmistä koskee lukujen kokoa. Edellisessä osassa sallittiin kaikki mahdolliset luvut, joten nyt on hyvä hetki asettaa rajoituksia.

Yhtä binäärinumeroa kutsutaan bitiksi. Tietokoneet kuitenkin käsittelevät isompia ryhmiä, joita kutsutaan tavuiksi. Tietotekniikan alkuaikoina käytetyt koot vaihtelivat, mutta nyttemmin tavu on vakiintunut 8 bitiksi. Tavuista muodostetaan edelleen isompia ryhmiä, joiden koot ovat yleisimmin 16, 32 ja 64 bittiä (2, 4 ja 8 tavua). Ennen vanhaan tuntui hyvältä idealta kutsua kahta tavua sanaksi, mutta nykyiset isommat ryhmät eivät oikein taivu tähän.

(Välihuomautus: tiedostojen kokoa mitataan yleensä kilo- ja megatavuina. Koska kakkosen potenssit ovat kova sana, kilo tarkoittaa tässä tuhannen sijasta $2^{10}=1024$ tavua. Kuitenkaan kovalevyjen ja muistitikkujen valmistajat eivät ole mukana tässä, jolloin levyt näyttävät todellista isommilta...)

Unohdetaan negatiivisten lukujen olemassaolo vähäksi aikaa, palaamme niihin ensi kerralla. Yhden tavun voi muodostaa $2^8 = 256$ tavalla, joten se voi esittää lukuja $0\dots 255$. Binäärimuodossa ne esitettäisiin $00000000\dots 11111111$. Edelleen 2 tavulla voidaan esittää luvut $0\dots 65535$, 4 tavulla suunnilleen $0\dots 4.29 \cdot 10^9$ ja 8 tavulla aina $1.84 \cdot 10^{19}$ asti.

Logiikkaa laskentaan

Palataan ala-asteelle harrastamaan kevyttä allekkainlaskua. Lasketaan $90+11$:

Peruskauraa: Ensin otetaan oikeanpuolimmaiset numerot, ja lasketaan ne yhteen. Seuraavaksi siirrytään vasemmalle, ja lasketaan $9+1=10$, josta jää muistinumeroksi ykkönen. Tämä ykkönen lasketaan vuorostaan seuraavaan sarakkeeseen, jossa tosin ei ole enää muita numeroita. Seuraavaksi tehdään sama binääriluvuille $10+11$ (eli $2+3$):

Samat säännöt pätevät: Oikeanpuolimmaiset numerot lasketaan tutulla tavalla yhteen. Seuraavista numeroista tulee binääriluku $1+1=10$, joten siirretään ykkönen muistinumeroksi. Vasemmanpuoleisimmassa sarakkeessa ei muuta olekaan kuin mainittu ykkönen, joka voidaan suoraan tiputtaa viivan alle.

Yritetään nyt esittää allekkainlaskun toiminta sarake kerrallaan. Ensinnäkin syötteenä ovat sarakkeen numerot ja mahdollisesti sarakkeen päällä oleva muistinumero. Tuloksena on viivan alle päätyvä numero ja mahdollinen muistinumero seuraavaan sarakkeeseen. Taulukkona tämä on hieman raskaan näköinen:

SisäänUlos
Ylempi numeroAlempi numeroMuistinumeroMuistinumeroTulos
00000
00101
01001
01110
10001
10110
11010
11111

Ensinnäkin, ulostuleva muistinumero on 1, mikäli kaksi tai kolme laskettavaa numeroa ovat ykkösiä. Tulosnumero on puolestaan 1, jos ykkösiä on tasan yksi tai kolme. Ensimmäinen sääntö voidaan ilmaista muodossa

\[ \text{(ylempi JA muistinumero) TAI (alempi JA muistinumero) TAI (ylempi ja alempi)} \]

ja jälkimmäinen saadaan muotoon

\[ \text{muistinumero XOR (ylempi XOR alempi).} \]

Ei aivan yksinkertaista, mutta näin se menee! (Muun muassa. Oikeasti se tehdään vielä näppärämmin, koska käytetään eri piirejä ja laskenta puristetaan vielä nopeammaksi.) Lupaan, että tämä jää viimeiseksi raskaaksi logiikaksi tässä sarjassa.

Viimeisenä juttuna tältä erää on hyvä pohtia, mitä saadaan laskemalla yhteen tavut $11111111 + 00000001$. Vastaus on... $0$! Oikeasti tulos olisi $100000000$, mutta tavuun mahtuu vain kahdeksan viimeistä bittiä. Siksi luvulle käy kuin vanhemman auton matkamittarille: se pyörähtää ympäri. Kun otetaan negatiiviset luvut mukaan, päästään vielä jännempiin tuloksiin... mutta se tapahtuu perjantaina.


Kokeiltavaksi ja pohdittavaksi

  • Laske allekkain yhteen binääriluvut $01100001 + 01111101$ (eli $97+125$).
  • Tietokone käsittelee värejä usein punaisen, vihreän ja sinisen yhdistelmänä. Kutakin komponenttia kuvataan yhdellä tavulla, joten väri esitetään 24-bittisenä lukuna. Kuinka monta väriä voidaan esittää tällä tavoin?

Ei kommentteja:

Lähetä kommentti

Kommentit ovat moderoituja — yritän hyväksyä kommenttisi mahdollisimman pian. Voit kirjoittaa kommenttiin LaTeX-koodia tai yksinkertaista HTML-merkintää: lue lisää Kommentointi-sivulta.