Perusteet-kurssin kertaus
Binääri- ja heksadesimaaliluvut
Binäärilukujen ja heksadesimaalilukujen perusteiden konkreettinen osaaminen mahdollistaa niiden hyödyntämisen muun muassa algoritmien suunnittelussa ja ohjelmoinnissa, rinnakkaisohjelmoinnissa, kryptografiassa ja tietoliikenteessä. Erilaiset kantalukujärjestelmät eivät siis kuulu pelkästään tietojenkäsittelytieteilijän ja ohjelmoijan yleissivistykseen, vaan lisäksi niiden ymmärtäminen on välttämätöntä useiden alan menetelmien oppimiseksi ja soveltamiseksi. Verkosta löytyvien muuntimien tai vaikkapa Pythonin käyttö lukujärjestelmämuunnoksiin harjoitellessasi ei edistä oppimistasi. Sen sijaan oppimistasi edistää, kun teet kaikki tehtävissä pyydetyt muunnokset käsin kynällä ruutupaperille ennen vastaamista. Kannattaa myös harjoitella niitä tarvittaessa vapaaehtoisesti enemmänkin.
Lisätietoja lukujärjestelmistä löydät Tietokoneen toiminnan perusteet -kurssilta ja asiaa käsittelevästä lisämateriaalista.
Kymmenjärjestelmä ja binäärijärjestelmä
Kymmenjärjestelmän luvut ovat 10-kantaisia lukuja ja binääriluvut 2-kantaisia lukuja. Heksadesimaaliluvut puolestaan ovat 16-kantaisia lukuja. Kymmenjärjestelmässä numeron paikka ilmaisee, montako mitäkin kymmenen potenssia (ykköset, kymmenet, sadat jne.) tarvitaan luvun ilmaisemiseen. Esimerkiksi
2735 = 2⋅1000 + 7⋅100 + 3⋅10 + 5⋅1
Binäärijärjestelmässä eli 2-kantajärjestelmässä vastaavasti numeron paikka ilmaisee, montako mitäkin kahden potenssia (ykköset, kakkoset, neljät, kahdeksat jne.) tarvitaan luvun ilmaisemiseen. Esimerkiksi
0b1001 = 1⋅8 + 0⋅4 + 0⋅2 + 1⋅1 = 9
Useissa ohjelmointikielissä on mahdollisuus ilmaista kokonaisluku binäärilukuna tai heksadesimaalilukuna. Muun muassa Pythonissa, Javassa, Javascriptissä, C:ssä ja C++:ssa käytetään etuliitettä 0b binäärilukujen ilmaisuun ja etuliitettä 0x heksadesimaalilukujen ilmaisuun. Esimerkiksi Pythonissa käyttäisit sitä näin:
luku = 0b1001
Muuttujan luku
arvo on tällöin sama kuin jos kirjoittaisit näin:
luku = 9
Heksadesimaalijärjestelmä
Binääriluvuissa on vain kaksi eri numeroa, joten niillä ilmaistut luvut ovat pitkiä. Siksi lukuja ilmaistaan usein heksadesimaalilukuina binäärilukujen sijaan. Heksadesimaalijärjestelmässä eli 16-kantajärjestelmässä puolestaan numeron paikka ilmaisee, montako mitäkin luvun 16 potenssia (ykköset, kuudettoista, kuudettoista, kaksisataaviisikymmentäkuudet jne.) tarvitaan luvun ilmaisemiseen.
Koska 16-kantaisessa järjestelmässä tarvitaan 16 numeroa, on käytössä kirjaimet A – F kuvaamaan ”numeroita” 10 – 15. Niinpä numerot nollasta yhdeksään ovat samat, mutta: 10 = A, 11 = B, 12 = C, 13 = D, 14 = E ja 15 = F.
Esimerkiksi heksadesimaaliluku 0x1AB muunnetaan kymmenjärjestelmään seuraavasti:
0x1AB = 1⋅256 + A⋅16 + B⋅1 = 1⋅256 + 10⋅16 + 11 = 256 + 160 + 11 = 427
Potenssimerkinnöin ilmaisten:
0x1AB = 1⋅162 + 10⋅161 + 11⋅160 =256 + 160 + 11 = 427
Esimerkiksi Pythonissa voit antaa muuttujalle kokonaislukuarvon heksadesimaalimuodossa näin:
luku = 0x1AB
Muuttujan luku
arvo on tällöin sama kuin jos kirjoittaisit näin:
luku = 427
Heksadesimaalilukujen ja binäärilukujen väliset muunnokset ovat suoraviivaisia. Kukin heksadesimaalinumero voidaan ilmaista neljällä bitillä eli binääriluvuilla 0b0000 - 0b1111. Esimerkiksi 0b0000 = 0x0 ja 0b1111 = 0xF.
Esimerkki: Luvun 0xCAFE muuntaminen binääriluvuksi
- 0xC = 12 = 0b1100
- 0xA = 10 = 0b1010
- 0xF = 15 = 0b1111
- 0xE = 14 = 0b1110
Niinpä 0xCAFE = 0b 1100 1010 1111 1110.
Muistathan tarkistaa pistetilanteesi materiaalin oikeassa alareunassa olevasta pallosta!