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ä (engl. sign-bit) 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
[muokkaa | muokkaa wikitekstiä]- 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ä:
Desimaalinen 10-kanta | Binäärinen 2-kanta | 1-komplementti | 2-komplementti |
---|---|---|---|
010 | 000000002 | 111111112 | 000000002 |
110 | 000000012 | 111111102 | 111111112 |
210 | 000000102 | 111111012 | 111111102 |
310 | 000000112 | 111111002 | 111111012 |
1210 | 000011002 | 111100112 | 111101002 |
9610 | 011000002 | 100111112 | 101000002 |
9710 | 011000012 | 100111102 | 100111112 |
12710 | 011111112 | 100000002 | 100000012 |
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ä.