05.11.2016 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!