Komplementti (tietotekniikka)

Wikipedia
Loikkaa: valikkoon, hakuun

Tietotekniikassa komplementiksi kutsutaan yleisintä negatiivisen luvun esitysmuotoa. Yleisin eli kahden komplementti tarkoittaa luvun vastaluvun muodostamista kääntämällä sen bitit ja lisäämällä tulokseen yksi.

Etumerkin käyttö[muokkaa | muokkaa wikitekstiä]

Negatiiviset luvut voidaan esittää binäärilaskennassa lisäämällä lukuun yksi bitti, jonka toinen arvo tarkoittaa positiivista lukua ja toinen arvo negatiivista lukua. Tällöin kuitenkin positiivisten ja negatiivisten lukujen yhteenlasku täytyy käsitellä erikoistapauksena ja muuttaa se esimerkiksi tarvittaessa vähennyslaskuksi. Esimerkiksi +3 + -3 täytyy muuttaa vähennyslaskuksi 3 - 3. Ei ole myöskään kovin yksinkertaista käsitellä negatiivisia tuloksia antavia laskutoimituksia.

Yhden komplementti[muokkaa | muokkaa wikitekstiä]

Yksinkertaisempaa on muuttaa negatiivisten lukujen bitit vastakkaisiksi (ykkönen nollaksi ja päinvastoin) eli luvun yhden komplementiksi. Tällöin yhteenlasku voidaan laskea samalla tavalla positiivisille ja negatiivisille luvuille. Esimerkiksi +3 + -3 on kolmen bitin yhden komplementtiluvuilla esitettynä:

 011
+100
----
 111

Esimerkistä huomaa erään yhden komplementin esitysmuodon ongelman: luvulla nolla on kaksi eri esitysmuotoa.

Toinen ongelma on merkkibitin käsittely. Jos etumerkillisten lukujen yhteenlaskusta tulee ylimääräinen muistinumero, se pitää erikseen lisätä tulokseen. Esimerkiksi -1 + -2 = -3:

 101
+110
----
1011 -> 1 + 011 = 100

Kahden komplementti[muokkaa | muokkaa wikitekstiä]

Nämä ongelmat poistuvat, jos käytetään kahden komplementtia. Tällöin luvun vastaluku saadaan kääntämällä luvun bitit ja lisäämällä tulokseen yksi. Kahden komplementtijärjestelmässä luvulla nolla on yksikäsitteinen esitystapa (bittikuvio, jonka kaikki bitit ovat nollia); nollan vastaluku on nolla. Sama yhteenlaskuoperaatio toimii sekä etumerkillisten että etumerkittömien lukujen kanssa.

Esimerkkinä +3 + -3 on kolmen bitin kahden komplementtiluvuilla esitettynä:

 011
+101
----
1000

Kun kolmen bitin tilan ylittävä bitti (1) jätetään pois, tulos on 000 eli nolla.

Kahden komplementtiluvuissa on aina yksi negatiivinen luku enemmän kuin on positiivisia (poislukien luku 0). Esimerkiksi kolmella bitillä esitettävät luvut ovat:

011  3
010  2
001  1
000  0
111 -1
110 -2
101 -3
100 -4

Tyypillisiä lukualueita ovat

  • -128..127 (8-bittiset luvut)
  • -32768..32767 (16-bittiset luvut)

Käytännöllisesti katsoen kaikki nykyiset tietokoneet käyttävät kahden komplementtilukuja negatiivisten lukujen esittämiseen. Muutama varhain suunniteltu tietokone käytti yhden komplementtia, esimerkiksi PDP-1 ja Univac/1100.