computer-wetenschap-bewerkt
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Hoofdstuk 73<br />
Two’s complement<br />
Waarden voor een 8-bitsgetal<br />
Two’s complement of 2-complement is een getalsrepresentatie voor gehele getallen (integers) die in <strong>computer</strong>s algemeen<br />
wordt gebruikt.<br />
Het is niet alleen associatief, maar heeft maar één representatie voor '0'. Het 2-complement is gelijk aan het 1-<br />
complement plus 1 als de tekenbit '1' is, dus bij negatieve getallen.<br />
Positieve getallen worden ook hierin voorgesteld door een bitrij beginnend met een 0 en negatieve beginnend met<br />
een 1, maar het tegengestelde bestaat nu uit een bitrij die verkregen wordt als het verschil met de bitrij met allemaal<br />
0-en en een 1 als extra bit ervoor geplaatst. Deze bitrij stelt dan het getal 2 n voor bij een representatie met n bits. De<br />
representatie komt neer op het rekenen modulo 2 n . Het positieve getal 79 bijvoorbeeld wordt (met 8 bits) voorgesteld<br />
door 01001111 en −79 door 10110001. Tellen we beide op, dan krijgen we als som de rij 100000000, die overigens<br />
zelf in de representatie niet voorkomt.<br />
Uit het bovenstaande kan afgeleid worden dat de representatie in 2-complement verkregen wordt door bij de representatie<br />
in 1-complement 1 op te tellen: −79 in 1-complement (8 bits) 10110000; tel er 1 bij op: 10110000 +<br />
00000001 = 10110001, de voorstelling van −79 in 2-complement.<br />
Net als bij 1-complement wordt bij 2-complement de meest significante bit gebruikt om aan te geven of een getal<br />
positief is of negatief. Deze meest significante bit heeft echter een andere betekenis dan bij 1-complement: in plaats<br />
van de rol van een soort minteken te vervullen, staat de meest significante bit (zeg, bit nummer n) voor −1 ∗ 2 n−1 .<br />
De rest van de bits wordt “normaal” geïnterpreteerd en een negatief getal wordt dan ook gevormd door de positieve<br />
waarde van de minder significante bits op te tellen bij −1 ∗ 2 n−1 .<br />
Door deze definitie van getallen is de hoogste waarde die gerepresenteerd kan worden met een bitrij waarvan de meest<br />
significante bit de waarde 1 heeft, de waarde −1. In tegenstelling tot 1-complement is er dus niet zoiets als −0 in<br />
2-complement notatie. Bijgevolg is het aantal representeerbare negatieve waarden in 2-complement ook 1 groter dan<br />
het aantal representeerbare positieve waarden: van −1 ∗ 2 n−1 tot en met 2 n−1 − 1 .<br />
De relatie tussen positieve en negatieve waarden is dan ook als volgt:<br />
Zijb=0b n−1 ···b 0 een bitrij die de waarde N representeert. Dan is (met dezelfde definitie voor complement<br />
van een bit als bij 1-complement) de bitrij die -N representeert gelijk aan 1b ∗ n−1 ···b ∗ 0 +1<br />
.<br />
Het idee is als volgt: stel dat met een bitrij de waarden −1∗2 n +1 tot en met 2 n −1 zou kunnen worden gerepresenteerd<br />
in 2-complement notatie (dus dan zou de interpretatie van de meest significante bit −1 ∗ 2 n +1zijn in plaats van<br />
−1 ∗ 2 n ). Voor iedere representeerbare negatieve waarde -N geldt dan: −N =(−1 ∗ 2 n +1)+(2 n − 1 − N)<br />
. Gegeven een waarde N, vinden we de waarde (2 n − 1 − N) door van alle bits behalve de meest significante het<br />
complement te nemen. Tellen we deze waarde op bij −1 ∗ 2 n +1(door ook de meest significante bit 1 te maken),<br />
dan vinden we (−1 ∗ 2 n +1)+(2 n − 1 − N) =−N . Echter, we hadden afgesproken dat de waarde van de<br />
meest significante bit −1 ∗ 2 n is en niet −1 ∗ 2 n +1. Om die ontbrekende 1 te compenseren, moet er 1 bij de<br />
complement-notatie opgeteld worden om bij N de waarde -N te vinden.<br />
Als voorbeeld vinden we −77 uit 77 in 2-complement als volgt:<br />
152