Tehty Lamer's tutorialia varten Teemu 'Brainless' Keinosen toimesta vuonna 1997 20. p„iv„ maaliskuuta. Laelliset n„k”kohdat: Min„, t„m„n dokumentin kirjoittaja, en ota mink„„nlaista vastuuta siit„, mita t„m„ teksti on aiheuttanut, v„lillisesti tai v„litt”m„sti, sinulle tai kenellekk„„n muulle, tai yleens„kk„„n millekk„„n. Paska homma, mutta maailma on julma. Itse tutoriaali: 1. Muut lukuj„rjestelm„t 2. Bittioperaatiot 3. 'lookup tables' 4. J„lkil”pin„t Ú¿ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÀÙ 1. Muut lukuj„rjestelm„t Olemme tottuneet laskemaan 10-j„rjestelm„ll„ luultavasti johtuen siit„, ett„ meill„ on kymmenen sormea. Mutta on muitakin lukuj„rjestelmi„, esimerkiksi oktaali ja heksadesimaalij„rjestelm„t. T„ss„ luvussa me tarkastelemme muita lukuj„rjestelmi„, ja eritoten bin„„rij„rjestelm„„. Tietokone osaa k„sitell„ vain ykk”si„ ja nollia, eli se k„ytt„„ bin„„rij„rjestelm„„. T„ll„ j„rjestelm„ll„ on kymmenj„rjestelm„„n vain yksi mainittava ero: se k„ytt„„ kahta merkki„ kymmenen asemasta. T„ss„ pieni esimerkki: bin„„ri ³ kymmenj„rj. ÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 1 ³ 1 10 ³ 2 100 ³ 4 1000 ³ 8 10 000 ³ 16 100 000 ³ 32 Havainnollistan nyt muutamaa muuta lukuj„rjestelm„„ samalla luvulla x, jonka arvo olkoot 27 kymmenj„rjestelm„ss„: x Bin„„risen„ 11011 x Oktaalij„rjestelm„ss„ 33 x Heksadesimaalij„rjestelm„ss„ 1B Bittejen k„sittely on kuitenkin aika vaikeaa, ja siksi k„ytet„„n j„rjestelmi„, jotka helpottavat ty”t„. Oktaalij„rjestelm„ on yksi t„llainen, mutta se ei ole j„rin k„yt„nn”llinen siit„ yksinkertaisesta syyst„, ett„ teitokone k„ytt„„ bittim„„ri„, jotka kaikki ovat jaollisia nelj„ll„, eiv„tk„ kolmella. oktaali ³ bin„„ri ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ 1 ³ 1 2 ³ 10 3 ³ 11 4 ³ 100 5 ³ 101 6 ³ 110 7 ³ 111 Paljon parempi j„rjestelm„ on heksadesimaalij„rjestelm„, joka perustuu lukuun kuusitoista, joka on aikaansaatavissa nelj„ll„ bitill„. T„ll„ tavalla bittej„ on helppo k„sitell„, koska yksi heksa korvaa aina nelj„ bitti„, ja kaikki tietokoneen k„sittelem„t tietom„„r„t ovat jaollisia nelj„ll„. hex ³ bin„„ri ³ ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ ³ 1011 0110 1100 0000 1 ³ 1 ³ ÄÄÂÄ ÄÄÂÄ ÄÄÂÄ ÄÄÂÄ 2 ³ 10 ³ B 6 C 0 3 ³ 11 ³ 4 ³ 100 ³ eli 5 ³ 101 ³ 6 ³ 110 ³ 101101101100000 7 ³ 111 ³ joka on heksana 8 ³ 1000 ³ B6C0 9 ³ 1001 ³ joka on 10-j„rj. A ³ 1010 ³ 46784 B ³ 1011 ³ C ³ 1100 ³ D ³ 1101 ³ E ³ 1110 ³ F ³ 1111 ³ Lukujen muuttaminen j„rjestelm„st„ toiseen on hyv„ taito, vaikka sit„ ei tarvitsisikaan, ainakaan usein. K„yt„nn”ss„ se tapahtuu n„in: Otamme lukuj„rjestelm„n, ja taulukon, jossa ovat potenssit lukuj„rjestelm„lle y, joka olkoot esimerkiss„ bin„„rinen. potenssi ³ luku ÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄ y^0 ³ 1 y^1 ³ 2 y^2 ³ 4 y^3 ³ 8 y^4 ³ 16 y^5 ³ 32 Dodii Dodii, ja sitten: otamme luvun 0101 ja alamme purkamaan sit„. Katsomme: ensimm„inen sarake: 1. Siit„ tulee toimitus 2^0 * 1 = 1. Katsomme: toinen sarake: 0. Siit„ tulee toimitus 2^1 * 0 = 0. Katsomme: kolmas sarake: 1. Siit„ tulee toimitus 2^2 * 1 = 4. Katsomme: nelj„s sarake: 0. Siit„ tulee toimitus 2^3 * 0 = 0. + ------- Ja t„m„ todistaa laskumme oikeiksi: 5 Toisin p„in t„m„ on samanlaista, mutta toisinp„in. Katsokaamme miten luku 39 muutetaan bin„„riksi: Ensin otamme taulukon, jossa ovat potenssit lukuj„rjestelm„lle y, joka on bin„„rinen, eli perustuu lukuun kaksi. potenssi ³ tulo ³ sarake ÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ 2^0 ³ 1 ³ 1 2^1 ³ 2 ³ 2 2^2 ³ 4 ³ 3 2^3 ³ 8 ³ 4 2^4 ³ 16 ³ 5 2^5 ³ 32 ³ 6 2^6 ³ 64 ³ 7 Ensin katsomme, mik„ on suurin luku, johon luku 39 menee. Se on luku 32, jonka v„henn„mme 39:st„ ja laitamme sarakkeeseen kuusi ykk”sen. Seuraavaksi katsomme mihin sopii luku 7, joka j„i j„ljelle. Se ei mene potenssiin nelj„, joten laitamme sarakkeeseen viisi arvon nolla. Se ei my”sk„„n mene sarakkeeseen nelj„, joten siihenkin nolla. Seuraava on sarake kolme, jonka potenssiarvoon luku 7 menee. Laitamme sarakkeeseen kolme ykk”sen. J„ljell„ on luku kolme, joka menee sarakkeisiin kaksi ja yksi, v„rj„ten ne ykk”siksi. Sarake: 6 5 4 3 2 1 Bitti : 1 0 0 1 1 1 Luku : 39 Luvun muuttaminen esimerkiksi kymmenj„rjestelm„st„ oktaaliksi on muuten samanlaista, mutta katsomme jokaisen sarakkeen kohdalla _monestiko_ luku menee kulloiseenkin potenssiin. T„m„ ei ole tarpeellista bin„„rij„rjestelm„ss„ sattuneesta syyst„, ett„ j„rjestelm„ss„ on vain numerot 0 ja 1. HUOM! ÄÄÄÄÄÄÄÄ Kikka 10-j„rjestelm„n luvun muuttamiseksi muihin lukuj„rjestelmiin: Ota 10-j„rjestelm„n luku x ja jaa se halutun lukuj„rjestelm„n kantaluvulla y. Jakoj„„nn”s laitetaan paperin vasempaan reunaan. Summa joka on j„ljell„, jaetaan taas y:ll„, ja jakoj„„nn”s laitetaan seuraavaksi oikealle viimeisimm„st„ jako- j„„nn”ksest„. T„t„ jatketaan, kunnes luku katoaa. Voitte tarkistella n„it„ mielenne mukaan ees ja taas ja aina tulla samaan tulokseen, ellette ole laskeneet v„„rin. Ú¿ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÀÙ 2. Bittioperaatiot T„m„ onkin jo paljon mielenkiintoisempi aihe, eik„ niin kamalan matemaattinenkaan. Joten luu kurkkuun ja bittioperaatioiden kimppuun. Niit„ on nelj„ perustyyppi„: AND, OR, XOR ja NOT. K„sittelemme ne kaikki. Bitin asettamisella tarkoitetaan sen asettamista todeksi (1), ja k„„nt„misell„ sen asettamista ep„todeksi (0). AND - bittinen JA operaatio 11110000 Asettaa bitin, jos sek„ vertailun l„hde JA kohde 00111100 ovat asetetut. JA---------- 00110000 OR - bittinen TAI operaatio 11110000 Asettaa bitin, jos joko toinen TAI kummatkin bitit 00111100 ovat asetetut. TAI--------- 11111100 XOR - bititt„inen poissulkeva TAI operaatio 11110000 Asettaa bitin, jos vain ja ainoastaan toinen bitti 00111100 on p„„ll„. (oiva rekistereiden nollaamiseen) XOR--------- 11001100 NOT - bititt„inen EI operaatio 11110000 Asettaa nollatut bitit ja toisinp„in. NOT--------- 00001111 3. 'lookup tables' T„m„ on siis juttu siit„, miten aikaaviev„t laskutoimitukset kannattaa laskea etuk„teen, ja varastoida ne taulukkoon. T„st„ on hy”ty„ monissa asioissa, ei v„hiten peleiss„. Otamme suoraan esimerkin C:ll„: float sin_table[270]; ... for (int a=0; a<270; a++) sin_ sin_table[a] = sin(a); Ja sielt„ niit„ sitten kannatta haeskella aina tarvittaessa: joku_luku = (sin_table[0] * cos_table[180]); // hih. ;) T„m„ nopeuttaa sovelluksia, joissa k„ytet„„n raskasta toistuvaa matematiikkaa _hyvin_ paljon. Se siit„. Helppo aihe. Ú¿ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÀÙ 4. Loppul”pin„t Mit„p„ t„ss„, loppu on. Virhekorjaukset, ehdotukset, vitsit, roskan, rahan ja flamet ja muut kivat asiat saa l„hett„„ seuraavaan osoitteeseen: teemu.keinonen@mbnet.fi TAI joonas.pihlajamaa@mbnet.fi