Luennot
Sivukartta
Sanasto
Laskuharjoitukset
|
Binäärijärjestelmän komplementeista
Yleisesti missä tahansa lukujärjestelmässä (kantaluku r), on kaksi erityyppistä komplementtia:
kantaluvun komplementti (radix complement) ja kantaluvun heikennetty komplementti
(diminished radix complement). Näistä edellistä kutsutaan r:n (eli kantaluvun) komplementiksi
ja jälkimmäistä (r -1 ):n komplementiksi. Nämä komplementit binäärijärjestelmän tapauksessa
ovat siis 2:n komplementti ja 1:n komplementti, sillä binäärijärjestelmän kantalukuhan on 2.
Komplementtia tarvitaan digitaalijärjestelmissä kuvaamaan negatiivisia ja positiivisia lukuja. Komplementointi on eräänlaista
lukualueen peilaamista tietyn peilauskohdan suhteen. Kyseessä on taas sopimus: on sovittu, että tiettyä rajapyykkiä itseisarvoltaan
suuremmat binäärisarjat tulkitaan negatiivisina ja tätä samaa rajapyykkiä pienemmät positiivisina. Rajapyykki sijoitetaan mahdollisimman
tarkasti lukualueen puoliväliin.
Käytäntö on, että jos komplementtiluvun eniten merkitsevä bitti on 0, luku on
positiivinen. Jos komplementtiluvun eniten merkitsevä bitti on 1, on luku negatiivinen. Jos luku on positiivinen, se tulkitaan
normaalisti sijoittamalla lausekkeeseen tarvittavat kakkosen kantaluvut, kuten on aiemminkin jo tehty.
(Esim 0101 = 1 × 2 2
+ 1 × 2 0 = 4 + 1 = 5). Jos luku on negatiivinen, täytyy tehdä
peilausoperaatio. Peilauksessa (riippuen komplementin tyypistä) suhteutetaan loput bittisarjan bitit ensimmäiseen lukuun.
Esimerkiksi luku 10101. Eniten merkitsevä bitti on 1, joten luvun muut bitit peilataan sen suhteen.
2-komplementin tapauksessa peilaus tapahtuu näin: 10101 = -16 + 4 + 1 = -11.
(Jos komplementin idea ei heti aukea, ei kannata masentua. Normaalielämässä riittää pitkälle, jos muistaa, että komplementointi
tarkoittaa lukualueen peilausta. Digitaalisuunnittelussa työkalut yleensä huolehtivat komplementoinnista.
Siihen törmätään vain erityisen haastavissa tapauksissa tai ongelmatilanteissa. Tentissä tosin asiaa kysytään usein jonkin verran.)
1-komplementti
Olkoon B positiivinen kokonaisluku, jonka suuruusosan esityspituus on n bittiä.
Tällöin B:n 1:n komplementti on
C1,n (B) = 2n - 1 - B
1-komplementin muuntaminen desimaalimuotoon kannattaa tehdä siten, että muunnetaan luku ensin
2-komplementtiin. Komplementtien välillä vallitsee yhteys:
C2,n(B) = C1,n(B) + 1
2-komplementti
Olkoon B positiivinen kokonaisluku, jonka suuruusosan esityspituus on n bittiä.
Tällöin B:n 2:n komplementti on
C2,n(B) = 2n - B
Käytännössä helppona nyrkkisääntönä voidaan muistaa seuraavaa: Jos luku on positiivinen,
se tulkitaan normaalisti. Tällöin muunnos 10-järjestelmään tapahtuu aivan samalla tavalla kuin on aiemmin esitetty.
Jos luku on negatiivinen, tulkitaan luvun eniten merkitsevä bitti
(merkkibitti) aivan kuin se olisi tavallinen kerroin, mutta negatiivisena. Tämän jälkeen tulkitaan
muut kertoimet positiivisina.
Esimerkki 1
Luku 1001102 (luku on siis 2-komplementtimuodossa, merkkibitti on 1 eli luku on
negatiivinen) tulkitaan seuraavasti:
1001102 = -1 × 25 +
1 × 22 + 1 × 21 = -3210 + 410 + 210 = -2610
Esimerkki 2
Luku 1011012 (luku on siis 2-komplementtimuodossa, merkkibitti on 1 eli luku on
negatiivinen) tulkitaan seuraavasti:
1011012 = -1 × 25 +
1 × 23 + 1 × 22 + 1 × 20 = -3210 + 810 + 410 + 110= -1910
Esimerkki 3
Luku 0110012 (luku on siis 2-komplementtimuodossa, merkkibitti on 0 eli luku on
positiivinen) tulkitaan seuraavasti:
0110012 = 1 × 24 +
1 × 23 + 1 × 20 = 1610 + 810 + 110 = 2510
Binääriluvun komplementin muodostaminen
1-komplementti on helppo muodostaa:
Kaavaa ( C1,n (B) = 2n - 1 - B ) tulkittaessa huomataan, että 1-komplementin
luvusta saa suoraan kääntämällä kaikki bitit nurin (eli ykkösestä tulee nolla, nollasta ykkönen).
Jos luku on lyhyempi kuin käytetty bittien määrä, lisätään alkuun lisää nollia ja käännetään ne
muunnoksessa ykkösiksi. Eli esim. jos on valittu 4 bittinen esitys tapa ja käsiteltävä luku on 510 = 1012. Nyt pitää lisätä yksi nolla luvun alkuun jolloin luvuksi tulee 01012
HUOM ! Mikäli luku on aluksi itseisarvo-etumerkki muodossa, jätetään etumerkki rauhaan. Siis etumerkkiä ei käännetä edellisen ohjeen mukaisesti vaan se pysyy samana.
Esimerkki 1
Suuruusosan esityspituus 7 bittiä, luku B=11001 (=2510)
- Lisätään tarvittavat nollat: B=0011001
- Käännetään bitit: C1,7(B) = 1100110, mikä on haluttu tulos
Tuloksen voi tarkistaa muuntamalla sen edelleen 2-komplementiksi ja sitä kautta kymmenjärjestelmään:
2-komplementiksi eli lisätään 1: C2,7(B)=1100111=
Muuntaminen 2-komplementista 10-järjestelmään tehdään kuten on esitetty edellä:
C2,7(B)=1100111= -26 + 25 +
22 + 21 + 20 = -2510
Esimerkki 2 0110011
Suuruusosan esityspituus 7 bittiä, luku B=1001101 (=7710)
- Nyt ei tarvitse lisätä numeroita luvun eteen, sillä sen pituus on jo 7 bittiä.
- Käännetään bitit: C1,7(B) = 0110010, mikä on haluttu tulos
Tuloksen voi tarkistaa muuntamalla sen edelleen 2-komplementiksi ja sitä kautta kymmenjärjestelmään:
2-komplementiksi eli lisätään 1: C2,7(B)=0110011.
HUOM ! Tämä vaikuttaisi olevan positiivinen luku, mutta sehän ei voi olla sitä, koska
edellä suoritimme komplementtia muodostaessamme peilauksen. Tämän takia tulee nyt lisätä yksi ykkönen koko luvun eteen, jotta tulos olis negatiivinen kuten pitääkin.
C2,7(B)=10110011= -27 + 25 +
24 + 21 + 20= -7710
Esimerkki 3
Suuruusosan esityspituus 7 bittiä, luku (itseisarvo-etumerkki muodossa) B=10011010 (=-2610). Ensimmäinen bitti kertoo etumerkin (1 = -)ja sitten tulee luvun suuruusosa (7 bittiä).
- Nyt ei kosketa lainkaan etumerkkiin. Lisäksi huomataan, että suuruusosa on jo 7 bittiä pitkä, joten ei tarvetta toimenpiteisiin.
- Käännetään bitit: C1,7(B) = 11100101, mikä on haluttu tulos
Tuloksen voi tarkistaa muuntamalla sen edelleen 2-komplementiksi ja sitä kautta kymmenjärjestelmään:
2-komplementiksi eli lisätään 1: C2,7(B)=11100110= -27 + 26 +
+ 25 + 22 + 21 = -2610
Esimerkki 4
Suuruusosan esityspituus 7 bittiä, luku (itseisarvo-etumerkki muotoinen) B=11001 (=-910). Ensimmäinen bitti kertoo etumerkin ( 1 = -)ja sitten tulee luvun suuruusosa (4 bittiä).
- Nyt ei taaskaan kosketa lainkaan etumerkkiin. Huomataan kuitenkin, että suuruusosa on vain 4 bittiä pitkä, joten siihen lisätään nollia. Näin saadaan:
B=10001001, missä lisätyt nollat on lihavoitu.
- Lopuksi käännetään bitit: C1,7(B) = 11110110, mikä on haluttu tulos
Tuloksen voi tarkistaa muuntamalla sen edelleen 2-komplementiksi ja sitä kautta kymmenjärjestelmään:
2-komplementiksi eli lisätään 1: C2,7(B)=11110111= -27 + 26 +
25 + 24 + 22 + 21 + 20 = -910
Esimerkki 5
Suuruusosan esityspituus 7 bittiä, luku (itseisarvo-etumerkki muotoinen) B=01100 (=1210). Ensimmäinen bitti kertoo etumerkin (0 = +)ja sitten tulee luvun suuruusosa (4 bittiä).
- Nyt ei taaskaan kosketa lainkaan etumerkkiin. Huomataan kuitenkin, että suuruusosa on vain 4 bittiä pitkä, joten siihen lisätään nollia. Näin saadaan:
B=00001100, missä lisätyt nollat on lihavoitu.
- Lopuksi käännetään bitit: C1,7(B) = 00001100, mikä on haluttu tulos
HUOM! Tässä oli siis positiivisen luvun muuntaminen 1-komplementtiin. Tarkkasilmäisimmät voivat huomata, että luku ei muuttunut lainkaan (mitä nyt nollia tuli lisää..) Jos tämä tuntuu hämärältä ks. selitystä aiemmin komplementin johdannon kohdalta.
Tuloksen voi tarkistaa muuntamalla sen edelleen 2-komplementiksi ja sitä kautta kymmenjärjestelmään:
Muuntaminen 2-komplementiksi on helppoa positiivisen luvun tapauksessa. Ei tehdä mitään muutoksia eli: C2,7(B)=00001100= 23 + 22
= 1210
2-komplementti muodostetaan joko 1-komplementin kautta lisäämällä siihen 1
(kuten edellisen esimerkin tarkistusosassa) tai suoraan seuraavalla algoritmillä:
- aloitetaan vähiten merkitsevästä bitistä
- jos bitti on 0 sitä ei muuteta, vaan siirrytään seuraavaan
- ensimmäinen vastaantuleva 1-bitti säilytetään ennallaan
- loput bitit käännetään (kaikki)
Esimerkki
Suuruusosan esityspituus 7 bittiä, luku B=10100= 0010100 ( = 10 10 )
C2,7(B)=1101100 ( = -10 10 )
Muiden lukujärjestelmien komplementeista
Komplementti voidaan ottaa myös muissa lukujärjestelmissä kuin binäärijärjestelmässä. Tässä on esitetty esimerkinomaisesti miten
tapahtuu r-kantaisen komplementin ottaminen. r-kantaisesta luvusta voidaan ottaa r-kantainen komplementti (radix complement) tai vähennetty r-kantainen komplementti (diminished radix complement, r-1))
r-kantaisen luvun N (joka on esitetty n:llä numerolla) r-kantainen komplementti lasketaan kaavalla Kr=rn-N.
Vastaavasti samaisen r-kantaisen luvun N , r-1 komplementti lasketaan kaavalla Kr-1=(rn-1)-N.
Tämä on helppo laskea, sillä se saadaan suoraan vähentämällä jokainen luvun N numero (n) numerosta (r-1).
Esimerkkinä on alla muunnettu muutamia lukuja niiden komplementeikseen.
Esimerkki 1
Luku +378 (=3110) on itseisarvo-etumerkki muodossa.
- Muistetaan, että komplementoitaessa positiivista lukua ei luvulle tapahdu mitään. Näin ollen:
+378 komplementoituna on 378
Tuloksen voi tarkistaa muuntamalla sen takaisin 10-järjestelmään:
378 = 3 × 81 + 7 × 80 = 24 + 7 = 3110
Esimerkki 2
Selitys 1
Luku -214 (=-910) on itseisarvo-etumerkki muodossa.
- Negatiivisen luvun komplementoinnissa on syytä olla tarkkana !
- Luku -214 on 4-kantainen --> r=4.
- Luvussa -214 on kaksi numeroa --> n=2.
- Muodostetaan vähennetty (r-1) komplementti, koska se on helpompi. --> Vähennetään kahdesta numerosta (n), jotka ovat suurudeltaan (r-1), luku N
Siis r-1 = 3, n=2 ja N=-214 --> Tästä saadaan
(r-1):n komplementiksi 334-214=124. Tämä osoittaisi luvun olevan positiivinen!! Tämän vuoksi luvun eteen lisätään numero 3
- r-1:n komplementti on siis 3124
- r:n komplementti saadaan sitten (r-1):n komplementista lisäämällä lukuun 1:nen ts. 3124+14=3134
Selitys 2
- Ensinnäkin huomataan, että suurin mahdollinen luku 4-järjestelmässä kahdella numerolla esitettynä on 334. Tämä vastaa lukua -110 komplementoinnin takia.
Kun luvun ensimmäinen numero on 0 tai 1 = (+) on kyseessä positiivinen luku ja kun ensimmäinen numero on 2 tai 3 = (-), on kyseessä negatiivinen luku. Näin ollen:
Nyt tiedetään, että tulokseksi on tulossa negatiivinen luku ts. komplementoidun luvun ensimmäinen numero on 2 tai 3
Lasketaan 334-214+14 = 134 Tämä on väärin! Ensimmäinen numero osoittaisi luvun olevan positiivinen, mitä se ei ole!!
Tarvitsemme siis esitystä kolmella numerolla jolloin luku 3334 = -110
Lasketaan 3334-214+14 = 3134
Tämä on haluttu vastaus.
Hieman lisäselvitystä
- Suurin luku 4-järjestelmässä on kahdella numerolla 33 tai kolmella 333. Vastaavasti 9-järjestelmässä 88 tai 888.
Tämä suurin luku vastaa lukua -110, mikäli ei olla itseisarvo-etumerkki-esityksessä. (Tällöinhän luvun etumerkin ilmoittaa suoraan + tai -)
- Pienin negatiivinen luku olisi esimerkin tapauksessa 2004 = -3210
- Se miksi laskutoimituksissa on mukana +1 johtuu siitä, että aloitamme vähennyslaskun laskemisen luvusta -110, emmekä luvusta 010
Toisin sanoen, mikäli emme lisäisi lukua +1, olisi edellinen muunnos ollut luvusta -224
- Luku +1 voidaan myös jättää lisäämättä, mutta silloin täytyy muistaa tietenkin vähentää vain -204 (Esimerkkimme tapauksessa)
Tuloksen voi tarkistaa muuntamalla sen takaisin 10-järjestelmään:
-(3334-3134+14) = -(21)4 = -(2 × 41 + 1 × 40) = - (8 + 1) = -910
Esimerkki 3
Muunnettava luku 1A11 takaisin 10-järjestelmään.
- Luvussa ei näy etumerkkiä, joten tulkitaan se positiiviseksi luvuksi ensimmäisen numeron perusteella.(0-->5 = + ja 6-->A = -)
- Nyt muuntaminen käy helposti, koska luku on positiivinen. Muunnetaan se aivan normaalisti (Komplementtiesityksessähän positiiviset luvut säilyvät muuttumattomina)
- 1 × 111 + 10 × 110 = (11 + 10) = 2110
Hieman lisäselvitystä
- Luku A11 vastaa lukua 1010. Muita kirjaimia kuin A ? ---> -Ks. taulukko aiemmin, jossa oli esitelty mm. heksadesimaaliluvut, oktaaliluvut ja desimaaliluvut.
Taulukon löydät lukujärjestelmä osion alusta.
Esimerkki 4
Muunnettava 9-järjestelmän 9-komplementin luku 829 takaisin 10-järjestelmään.
- Luku on negatiivinen ensimmäisen numeron perusteella (0-->4 = + ja 5-->8 = -)
- Nyt mietitään mikä on suurin mahdollinen luku (kahdella numerolla, koska tehtävänantokin oli kahdella numerolla) 9-järjestelmässä.
- Suurin mahdollinen luku on 889 = -110
- Nyt tehdään laskutoimitus: 889 - 829 = 69
69 + 19 = 79
- Lopuksi muunnetaan 79 10-järjestelmään kuten on aiemmin opittu ja muistetaan vielä, että käsitellään negatiivista lukua.
Tulokseksi saadaan : -710
Hieman lisäselvitystä
- Miksi laskutoimituksessa lisätään yksi "ylimääräinen" ykkönen?
Tämä tehdään siksi, että jos olisi seuraavanlainen tilanne: Pitäisi muuntaa luku 889 takaisin
10-järjestelmään. Tällöin muunnos 889-889 = 010. Tämä antaisi tulokseksi luvun nolla. Kuitenkin on sovittu, että 889 vastaa lukua -110. Tämän takia vähennetään yksi "ylimääräinen" ykkönen.
Tämä tapahtuu laskemalla 09 + 19 = 19 , joka muunnetaan 10-järjestelmään muistaen kuitenkin, että kyse on neg.luvusta 19 ==> -110. Tämä on haluttu (ja oikea) lopputulos
|