On kolme eri tapaa esittää etumerkittyä kokonaislukua (artikkeli). a: Merkkibitti, b: 1:n komplementti ja c: 2:n komplementti. Yritetään ymmärtää, miten nämä menetelmät ovat johtaneet ja miksi 2:n komplementti on parempi kuin muut.
Kuten tiedämme, tiedot tallennetaan bitteinä. Kuinka voimme tallentaa etumerkillisen kokonaisluvun muistiin? Tämän ongelman ratkaisemiseksi kehitämme ensin naiivin ratkaisun ja sitten toistamme sitä, kunnes meillä on paras ratkaisu ongelmallemme.
a) Signeerattu bitti
Kun yritetään tallentaa etumerkillistä kokonaislukua, näyttää itsestään selvältä varata vasemmanpuoleisin bitti etumerkille ja käyttää jäljellä olevia bittejä arvojen tallentamiseen. Esimerkiksi: 4-bittisessä järjestelmässä ensimmäinen bitti vasemmalta varataan etumerkille (0 edustaa positiivista, kun taas 1 on negatiivinen) ja muuta 3 bittiä käytetään arvojen tallentamiseen. Vastaavasti 8-bittisessä järjestelmässä ensimmäistä bittiä vasemmalta käytetään etumerkille ja loput 7 arvoille.
| Herra Ei. | Binääriesitys | Desimaaliarvo |
| A | 0000 | +0 |
| B | 0001 | +1 |
| C | 0010 | +2 |
| D | 0011 | +3 |
| JA | 0100 | +4 |
| F | 0101 | +5 |
| G | 0110 | +6 |
| H | 0111 | +7 |
| minä | 1000 | -0 |
| J | 1001 | -1 |
| K | 1010 | -2 |
| L | 1011 | -3 |
| M | 1100 | -4 |
| N | 1101 | -5 |
| O | 1110 | -6 |
| P | 1111 | -7 |
Tätä lähestymistapaa käyttämällä pystymme edustamaan etumerkillistä kokonaislukua. Mutta kun analysoimme sitä tarkemmin, voimme havaita seuraavat haitat:
1) Kaksi nollan esitystä:
4-bittisessä järjestelmässä meidän pitäisi pystyä tallentamaan 16 (24) arvoa, mutta +1 - +7 ja -1 - -7 ovat vain 14 arvoa. Missä on kaksi jäljellä olevaa arvoa? Kun tarkastelemme taulukkoa huolellisesti, huomaamme, että nämä kaksi arvoa konvergoivat nollaan. Näin ollen meillä on kaksi esitystä nollasta, mikä tarkoittaa, että yksi esitys on +0 ja toinen -0.
Mutta ovatko 0:n kaksi esitystä suuri huolenaihe? Mitä sitten? 16 yksilöllisen arvon sijaan pystymme tallentamaan vain 15 arvoa. Meillä on varaa pienentää aluetta yhdellä, eikö niin? Ohjelmiston kehittäjälle se ei ehkä kiinnosta, mutta piirisuunnittelijalle voi olla erittäin turhauttavaa tarkistaa ensin onko arvo +0 ja sitten -0.
2) Allekirjoitettu laajennus ei toimi negatiivisille luvuille:
Tietojen koko kasvaa nopeasti. Jonkin aikaa meidän on laajennettava bittijärjestelmää, jotta voimme lisätä tallennettavan tiedon määrää. Vuonna 2014 Gangnam Style -video ylitti YouTuben katselurajoituksen ja pakotti YouTuben päivittämään katselukertojen määrän 32-bittisestä 64-bittiseen etumerkilliseen kokonaislukuun. Vastaavasti 32-bittinen Unix-kello vuotaa yli 19. tammikuuta 2038, koska se tallentaa ajan sekunteina 32-bittiseen etumerkilliseen kokonaislukuun.
Joten yhtä tärkeää on, että esitysjärjestelmämme on helposti laajennettavissa, mikä ei ole mahdollista tällä esitysjärjestelmällä.
| Desimaali | 4-bittinen | 5-bittinen | 6-bittinen |
| +2 | 0010 | 00010 | 000010 |
| +7 | 0111 | 00111 | 000111 |
| -2 | 1010 | 10010 (!= 11010) | 100010 (!= 111010) |
| -7 | 1111 | 10111 (!= 11111) | 100111 (!= 111111) |
3) Binäärilisäys ei toimi:
Yritetään lisätä kaksi binäärilukua:
| Binääri | Desimaali | Binääri | Desimaali | Binääri | Desimaali | |||
| Numero 1 | 0010 | +2 | 0111 | +7 | 1101 | -5 | ||
| Numero 2 | 1010 | -2 | 1010 | -2 | 0011 | +3 | ||
| Binäärilisäys | 1100 | -4 | 0001 | +1 | 0000 | +0 | ||
| Desimaalien yhteenlasku | +0 | +5 | -2 |
Miksi yksinkertainen binäärilisäys ei toimi täällä? Syynä on, että etumerkkibitti (vasemmalla) ei ole tavallinen bitti eikä osa todellista lukua. Kuvittele tilanne, jossa täytyy suunnitella laitteistopiiri jättämään etumerkkibitti huomioimatta, jotta voidaan suorittaa lisäys ja sitten liittää etumerkkibitti.
Tämä oli siis naiivi tapa edustaa etumerkillistä kokonaislukua. Suurin ongelma tässä lähestymistavassa on, että olemme kartoittaneet negatiiviset luvut alaspäin. Jos muutamme kartoitusjärjestelmäämme ylhäältä alaspäin, osa yllä olevista ongelmista ratkaistaan.
b) 1's Co toteuttaa
Jos kuvaamme negatiiviset luvut uudelleen ylhäältä alaspäin, saamme seuraavan binääritaulukon:
| Kyllä ei. | Binääriesitys | Desimaaliarvo | |
| 1:n täydennys | Signeerattu bitti | ||
| A | 0000 | +0 | +0 |
| B | 0001 | +1 | +1 |
| C | 0010 | +2 | +2 |
| D | 0011 | +3 | +3 |
| JA | 0100 | +4 | +4 |
| F | 0101 | +5 | +5 |
| G | 0110 | +6 | +6 |
| H | 0111 | +7 | +7 |
| minä | 1000 | -7 | -0 |
| J | 1001 | -6 | -1 |
| K | 1010 | -5 | -2 |
| L | 1011 | -4 | -3 |
| M | 1100 | -3 | -4 |
| N | 1101 | -2 | -5 |
| O | 1110 | -1 | -6 |
| P | 1111 | -0 | -7 |
Kuinka saada binääriesitys kokonaisluvusta 1:n komplementtimenetelmässä?
- Positiiviset luvut esitetään samalla tavalla kuin etumerkitty kokonaislukumenetelmä
- Negatiiviset luvut esitetään kääntämällä jokainen vastaavan positiivisen luvun bitti (invertointi voidaan tehdä helposti käyttämällä NOT-porttia laitteistosuunnittelun aikana)
Analysoidaan tätä tarkasti nähdäksemme, olemmeko saavuttaneet parannuksia.
1) Kaksi nollan esitystä:
Tässä lähestymistavassa meillä on myös kaksi nollan esitystä.
2) Allekirjoitettu laajennus ei toimi negatiivisille luvuille:
Allekirjoitettu laajennus toimii täydellisesti negatiivisille numeroille.
| Desimaali | 4-bittinen | 5-bittinen | 6-bittinen |
| +2 | 0010 | 00010 | 000010 |
| +7 | 0111 | 00111 | 000111 |
| -2 | 1101 | 11101 | 111101 |
| -7 | 1000 | 11 000 | 111 000 |
3) Binäärilisäys toimii muokatuilla säännöillä:
| Binääri | Desimaali | Binääri | Desimaali | Binääri | Desimaali | |||
| Numero 1 | 0010 | +2 | 0111 | +7 | 1010 | -5 | ||
| Numero 2 | 1101 | -2 | 1101 | -2 | 0011 | +3 | ||
| Binäärilisäys | 1111 | -0 | 0100 | +4 | 1101 | -2 | ||
| Desimaalien yhteenlasku | +0 | +5 | -2 |
Vastaus ei ole aina oikea, mutta se on hyvin lähellä oikeaa vastausta. Voimme saada sen toimimaan, jos noudatamme sitä sääntöä Jos olet luonut siirron vasemmalla puolellasi, älä heitä sitä pois, vaan tuo se takaisin ja lisää se oikealle eniten.
| Binääri | Desimaali | Binääri | Desimaali | Binääri | Desimaali | |||
| Numero 1 | 0111 | +7 | 1110 | -1 | 0111 | +7 | ||
| Numero 2 | 1101 | -2 | 1001 | -6 | 1011 | -4 | ||
| Binäärilisäys | (1) 0100 | +4 | (1) 0111 | +7 | (1) 0010 | +2 | ||
| Siirron lisääminen taaksepäin | 0101 | +5 | 1000 | -7 | 0011 | +3 |
Ehdottomasti 1:n komplementtimenetelmä on parempi kuin etumerkitty bitti. Tärkeimmät huolenaiheemme on ratkaistu, mutta ne ovat edelleen ongelma (jossa on kaksi nollan esitystä), ja binäärilisäyksen hakkerointi antaa vihjeitä 1:n komplementtimenetelmän parantamiseen. Muotoillaan nämä lauseet uudelleen helpottamaan niitä.
- Meillä on ylimääräinen nollaesitys, joka on tarpeeton
- Kun lisäämme kaksi binaarilukua, jos meillä on siirto eteenpäin vasemmalla eniten, niin tulokseen on lisättävä +1, eli oikea vastaus löytyy siirtymällä alas binääritaulukon seuraavalle riville.
Molemmat osoittavat meille, että ylimääräinen nollaesitys on ongelman perimmäinen syy. Joten, poistetaan tämä ylimääräinen nolla ja siirretään kaikki negatiiviset arvot seuraavalle riville (-7 siirtyy I -> J, -6 siirtyy J -> K ja niin edelleen...)
c) 2:n komplementti
Kun poistamme -0 luvun 1:n komplementtitaulukosta ja siirrämme kaikki negatiiviset arvot yhden rivin alapuolelle, saamme seuraavan taulukon, jota kutsutaan 2:n komplementiksi:
| Kyllä ei. | Binääriesitys | Desimaaliarvo | |||
| 2:n täydennys | 1:n täydennys | Signeerattu bitti | |||
| A | 0000 | +0 | +0 | +0 | |
| B | 0001 | +1 | +1 | +1 | |
| C | 0010 | +2 | +2 | +2 | |
| D | 0011 | +3 | +3 | +3 | |
| JA | 0100 | +4 | +4 | +4 | |
| F | 0101 | +5 | +5 | +5 | |
| G | 0110 | +6 | +6 | +6 | |
| H | 0111 | +7 | +7 | +7 | |
| minä | 1000 | -8 | -7 | -0 | |
| J | 1001 | -7 | = 7 + 1-bitin käänteisarvo | -6 | -1 |
| K | 1010 | -6 | = 6 + 1-bitin käänteisarvo | -5 | -2 |
| L | 1011 | -5 | = 5 + 1-bitin käänteisarvo | -4 | -3 |
| M | 1100 | -4 | = 4 + 1-bitin käänteisarvo | -3 | -4 |
| N | 1101 | -3 | = 3 + 1-bitin käänteisarvo | -2 | -5 |
| O | 1110 | -2 | = 2 + 1-bitin käänteisarvo | -1 | -6 |
| P | 1111 | -1 | = 1 + 1-bitin käänteisarvo | -0 | -7 |
Kuinka saada binääriesitys kokonaisluvusta 2:n komplementtimenetelmässä?
- Positiiviset luvut esitetään samalla tavalla kuin etumerkitty kokonaislukumenetelmä
- Negatiiviset luvut esitetään kääntämällä jokainen vastaavan positiivisen luvun bitti ja lisäämällä siihen 1 bitti
1) Yksi nollan esitys:
Nyt meillä on vain yksi esitys nollasta ja sen avulla voimme tallentaa yhteensä 16 yksilöllistä arvoa (+0 - +7 ja -1 - -8).
2) Merkitty laajennus toimii negatiivisille luvuille:
Allekirjoitettu laajennus toimii täydellisesti negatiivisille numeroille.
| Desimaali | 4-bittinen | 5-bittinen | 6-bittinen |
| +2 | 0010 | 00010 | 000010 |
| +7 | 0111 | 00111 | 000111 |
| -2 | 1110 | 11110 | 111110 |
| -7 | 1001 | 11001 | 111001 |
3) Binäärilisäys:
| Binääri | Desimaali | Binäärilataa youtube-video vlc:llä | Desimaali | Binääri | Desimaali | Binääri | Desimaali | ||||
| Numero 1 | 0010 | +2 | 0111 | +7 | 1011 | -5 | 1111 | -1 | |||
| Numero 2 | 1110 | -2 | 1110 | -2 | 0011 | +3 | 1010 | -6 | |||
| Vastaus | 0000 | +0 | 0101 | +5 | 1110 | -2 | 1001 | -7 |
4) Ensimmäinen bitti on etumerkitty bitti:
2:n komplementilla on tämä hieno ominaisuus, että ensimmäinen bitti on merkkibitti, koska kaikki positiiviset alkavat 0:lla, kun taas kaikki negatiiviset 1:llä.
5) Muistin ylivuototarkistus:
Lisäyksen aikana varmistimme, että vastauksemme on rajoissa, mutta laitteistoa suunniteltaessa muistin ylivuoto on havaittava. Laitteistosuunnittelijoiden on erittäin huono idea tarkistaa suuruus ylivuodon havaitsemiseksi. 2:n komplementtimenetelmä tarjoaa erittäin yksinkertaisen tavan havaita muistin ylivuoto. minä f carry in to signed bit ei ole yhtä suuri kuin car out of signed bit, silloin kyseessä on muistin ylivuoto eli jos siirto sisään etumerkittylle bitille on 0, mutta suoritus on 1 tai jos siirto 1, mutta suorita on 0, kyseessä on muistin ylivuoto.
| Binääri | Desimaali | Binääri | Desimaali | Binääri | Desimaali | Binääri | Desimaali | ||||
| Numero 1 | 1011 | -5 | 0010 | 2 | 0111 | +7 | 1011 | -5 | |||
| Numero 2 | 1100 | -4 | 0110 | 6 | 1110 | -2 | 0011 | 3 | |||
| Lisäys | (1) 0111 | (0)1000 | (1)0101 | (0)1110 | |||||||
| viedä sisään allekirjoittaaksesi bitin | 0 | ylivuoto | 1 | ylivuoto | 1 | Ei | 0 | Ei | |||
| suorittaa allekirjoittaa vähän | 1 | 0 | 1 | 0 |