Komplementti (tietotekniikka)

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

Historia 
Eräät varhaiset tietokoneet kuten UNIVAC 1100 -sarja ovat käyttäneet yhden komplementtia, mutta tämä on pääasiassa jäänyt pois käytöstä. Sen sijaan kahden komplementti on yleistynyt muun muassa IBM S/360:n vaikutuksesta.

Etumerkin käyttö 

Negatiiviset luvut voidaan esittää binäärilaskennassa lisäämällä luvun esitysmuotoon yksi bitti, merkkibitti, 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 

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: 000 ja 111.

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 
Yhden komplementtiin liittyvät 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) ja 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 lukuja (pois lukien 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.

Katso myös
 Liukuluku

Lähteet 

Tietokonearitmetiikka

ca:Complement a u
de:Einerkomplement
fr:Complément à un
vi:Biểu diễn số âm