Kahden komplementti

Kahden komplementti on binääriluvun esitys, jota käytetään tietokoneissa yksinkertaistamaan vähennyslaskutoimitusta. Kahden komplementtia käytettäessä vähennyslasku muuntuu tavalliseksi yhteenlaskuksi, jonka tietokone voi helposti suorittaa. Silloin riittää, kun huolehditaan yhteenlaskussa ylivuototapauksessa muistinumeron carry-bitistä. Vähennyslaskun lainaus eli borrow-bittiä ei silloin laskuissa tarvita.

Yleisesti kahden komplementti -esitystä käytetään tietokoneissa myös osoittamaan negatiivisia lukuja (eli lukuja jotka ovat <0). Jotkut tietokoneet ilmaisevat negatiivisen luvun kuitenkin vaihtoehtoisella etumerkillä () menettelyllä, jolloin binäärisanan ylintä bittiä (MSB) käytetään osoittamaan luvun negatiivisuutta. Komplementtiesityksellä saavutetaan muitakin etuja, edellä mainitun vähennyslaskun lisäksi. Sillä voidaan muun muassa esittää yhtä suurempi numeroavaruus tietokoneen muistissa, kun nollaa ei tarvitse koodata kahdesti. Tietokoneen muistissa olevan datan arvoalue voi silloin olla negatiivisella puolella yhtä suurempi. Esimerkiksi 16 bitin tapauksessa −32 768…32 76710.

Kahden komplementin muodostaminen 
 käännetään binäärisanan kaikki bitit (jolloin saadaan yhden komplementti)
 lisätään yksi (jolloin saadaan kahden komplementti)

 
Esimerkki 1 muodostetaan luvun 310 kahden komplementti

 Binääriesitys luvulle 310  0112
 Käännetään bitit           1002  (=yhden komplementti)
 Lisätään yksi              + 12  (=lisätään 1)
                            ====
                            1012  (=luvun 0112  kahden komplementti)

Esimerkki 2 lasketaan 1510 – 310 =1210 käyttäen 8-bittistä kahden komplementtia

 Binääriesitys luvulle 1510      0000 11112      
 Binääriesitys luvulle 310       0000 00112      
 Luvun 310 kahden komplementti   1111 11012
 
 Yhteenlaskun suorittaminen:   
  111111 111        (carry)
   0000 11112      (1510)
 + 1111 11012      (−310)
 ===========
   0000 11002      (1210)  (yhteenlaskun viimeinen carry äärimmäisenä vasemmalla MSB päässä jätetään huomiotta) 

Taulukko 10-kantaisen ja binäärisen 8-bittisen luvun arvojen välillä:

Kahden komplementtia ei pidä sotkea Alternate Mark Inversion -koodaukseen (AMI-koodiin) eikä Gray-koodiin. AMI-koodia käytetään tiedonsiirrossa (yhdessä tai erikseen muiden linjakoodien kuten HDB-3 ja 4B3T kanssa) muuttamaan binäärinen RZ koodi NRZ koodiksi. Gray-koodia käytetään mm. sektorikiekkoantureissa minimoimaan lukuvirheitä.

Tietokonearitmetiikka