Kymmenjärjestelmä
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ...
Binäärijärjestelmä (kaksijärjestelmä)
0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, ...
Jos lukujärjestelmästä voi tulla epäselvyyttä, se voidaan ilmaista alaindeksillä: 1012 (binääriluku) ja 10110 (kymmenjärjestelmän luku).
Mistä tiedämme (laskematta alusta), mikä on esimerkiksi lukua 583 vastaava binääriluku? Entä mitä binääriluku 1011 0111 on tavallisena kymmenjärjestelmän lukuna?
Muunnetaan binääriluku 1011 0111 kymmenjärjestelmän luvuksi.
Tiedämme, että...
5 8 3 = (5 * 102) + (8 * 101) + (3 * 100)
Vastaavalla tavalla...
1011 0111 = (1 * 27) + (0 * 26) + (1 * 25) + (1 * 24) + (0 * 23) + (1 * 22) + (1 * 21) + (1 * 20) = 183
Lukuja on helppo muuntaa binäärijärjestelmästä kymmenjärjestelmään. Entäpä kymmenjärjestelmästä binääriin? Muunnetaan luku 583 binääriluvuksi.
Menetelmä 1. Etsitään mahdollisimman suuria kakkosen potensseja.
Binääriluku luetaan ylhäältä alaspäin: 10 0100 0111
Menetelmä 2. Jaetaan alkuperäistä lukua kakkosella ja kerätään jakojäännökset.
Binääriluku luetaan lopusta alkuun: 10 0100 0111
Binäärijärjestelmän ohella tarpeellisia lukujärjestelmiä tietojenkäsittelijälle ovat myös
Oktaalijärjestelmä:
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, ...
Heksadesimaalijärjestelmä:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F, 20, 21, 22, ...
Binäärijärjestelmästä on helppo siirtyä oktaali- ja heksadesimaalijärjestelmiin. Binääriluvun kolmen bitin ryhmät vastaavat yhtä oktaalinumeroa ja neljän bitin ryhmät heksanumeroa, esim.
1011110111 oktaalina
Ryhmitellään ensin loppupäästä alkaen bitit 3 bitin ryhmiin: 1 011 110 111. Muunnetaan sitten jokainen kolmen bitin ryhmä erikseen oktaaliluvuksi:
1 => 1 ja 011 => 3 ja 110 => 6 ja 111 => 71011110111 heksana
Ryhmitellään ensin loppupäästä alkaen bitit 4 bitin ryhmiin: 10 1111 0111. Muunnetaan sitten jokainen neljän bitin ryhmä erikseen heksaluvuksi:
10 => 2 ja 1111 => F ja 0111 => 7 Koko heksaluku on siis 2F7.Vastaavalla tavalla oktaali- ja heksalukuja voidaan muuntaa binääriluvuiksi: jokaisesta numerosta tehdään kolmen tai neljän bitin vastaava ryhmä. Esim. heksaluku 1B3 binäärijärjestelmässä:
1 => 0001 ja B => 1011 ja 3 => 0011
Koko binääriluku on siis 0001 1011 0011.
Esimerkiksi UNIXin tiedostojen oikeudet voidaan chmod-komennolla antaa suoraan absoluuttisina käyttäen oktaalilukuja. Oikeudet 644 vastaavat bittijonoa 110 100 100, joka tarkoittaa, että käyttäjällä itsellään on luku- ja kirjoitusoikeus (rw) ja kaikilla muilla (ryhmä ja muu maailma) on pelkkä lukuoikeus (r).
Tiedämme, että desimaaliluvun desimaaliosa muodostuu seuraavasti:
43.75 = (4 * 101) + (3 * 100) + (7 * 10-1) + (5 * 10-2)
Binääripistettä käsitellään vastaavalla tavalla. Muunnetaan ensin binääriluku kymmenjärjestelmän luvuksi:
101011.11 = (1 * 25) + (0 * 24) + (1 * 23) + (0 * 22) + (1 * 21) + (1 * 20) + (1 * 2-1) + (1 * 2-2) = 32 + 0 + 8 + 0 + 2 + 1 + 0,5 + 0,25 = 43,75
Kymmenjärjestelmän luku 4,165 binääriluvuksi:
Käsitellään kokonaisosa ja desimaaliosa erikseen. Kätevä mekaaninen muunnostapa:
Kokonaisosa:
Desimaaliosa:
Näin syntyy binääriluku 100.001010...
1. Kokonaisluvut binäärilukuina
Tietokoneessa positiiviset kokonaisluvut esitetään yksinkertaisesti vastaavina binäärilukuina. Negatiivisten lukujen esittäminen voidaan tehdä eri tavoin. Tässä emme käsittele negatiivisia lukuja lainkaan.
Javassa on neljä eripituista kokonaislukutyyppiä. Lukutyyppien pituudet ja lukualueet:
2. Desimaaliluvut liukulukuina
Desimaaliluvutkin esitetään vastaavina binäärilukuina, mutta desimaaliosien kanssa on se ongelma, ettei niitä pystytä aina esittämään tietokoneessa tarkasti.
Desimaaliluku, esim. 43,75, esitetään tietokoneessa ns. liukulukuna. Käytettävissämme on kaksi 'kenttää', mantissa ja eksponentti. Mantissaan sijoitetaan se varsinainen luku ja eksponentti kertoo, missä kohdassa lukua binääripiste sijaitsee. Oletetaan tässä, että mantissalle on varattu 8 bittiä ja eksponentille 4.
Luku 43,75 muunnetaan ensin vastaavaksi binääriluvuksi 101011.11. Sitten sijoitamme mantissaan niin paljon tämän luvun alusta lähtien kuin sinne mahtuu. Koska mantissamme on kahdeksan bittiä pitkä, koko binääriluku mahtuu siihen. => Mantissa: 10101111
Seuraavaksi määrittelemme eksponentin, joka kuvaa binääripisteen paikan eli sen, kuinka paljon binääripistettä on siirrettävä vasemmasta reunasta oikealle päin. Binääripiste kuvitellaan alussa aivan oikeaan reunaan eli .10101111 ja lopullisessa luvussamme sen piti olla 6 bittiä enemmän oikealla eli 101011.11. Eksponentin siis tulee 6, koska sillä siirretään binääripistettä 6 bittiä oikealle. Esitetään tämä eksponentin arvo 6 binäärilukuna: 0110.
Liukulukujen epätarkkuus
Kymmenjärjestelmä desimaalilukuja ei voida esittää täysin tarkasti binäärijärjestelmässä. Esimerkiksi jos yritämme esittää kymmenjärjestelmän luvun 5,123 binäärilukuna, joudumme tyytymään likiarvoon. Oletetaan edelleen, että mantissallemme on tilaa 8 bittiä ja eksponentille neljä.
Luku 5,123 olisi oikeana binäärilukuna 101.0001111101...
Mantissaan mahtuu 8 ensimmäistä bittiä eli 10100011. Binääripiste pitäisi saada kohtaan 101.00011 eli sitä pitää siirtää 3 bittiä oikealle. Eksponentiksi tulee tällöin kolme eli binäärilukuna 0011.
Eli mantissaan ja eksponenttiin saatiin tallennettua binääriluku 101.00011 = 5,0937510. Alkuperäinen luku oli 5,12310.
Pyöristysvirheiden seurauksia:
Päivitetty 13.05.1999 / Sari A. Laakso,
email: salaakso@cs.helsinki.fi
Sivun URL: http://www.cs.Helsinki.FI/~salaakso/alkeet/luentomoniste/nomenu/lukujarj.html
Näiden WWW-sivujen hallintajärjestelmän kehitti Tero Pekkanen