Two's complement
Getalsrepresentatie voor gehele getallen / Uit Wikipedia, de vrije encyclopedia
Two's complement of 2-complement is een getalsrepresentatie voor gehele getallen die in computers voor integers algemeen wordt gebruikt en waarmee de rekenoperaties relatief gemakkelijk kunnen worden geïmplementeerd. Een andere, minder gebruikelijke voorstelling is one's complement.
Aan de hand van de representatie met 8 bits wordt uitgelegd hoe de toewijzing plaatsvindt aan de getallen −128, −127,..., −1, 0, 1, 2,...,127. Van de bitrijen die binair de getallen 0, 1,..., 255 voorstellen, worden de rijen met de meest significante bit 0, dus binair 0,1,...127, met hun binaire waarde aan nul en de positieve getallen toegewezen. De bitrijen met de meest significante bit 1, dus binair 128,129,...255, stellen negatieve getallen voor en wel oplopend in deze volgorde −128, −127, ..., −1. Schematisch:
binair | bitrij | two's complement | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | |
... | ||||||||||
126 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 126 | |
127 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 127 | |
128 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | −128 | |
129 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | −127 | |
130 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | −126 | |
... | ||||||||||
254 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | −2 | |
255 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | −1 |
Het voorbeeld laat zien dat, in het geval dat 8 bits per getal beschikbaar zijn, een positief getal wordt weergegeven door de bitrij als binair getal en de -de bit van een negatief getal, die vooraan wordt weergegeven, gelijk aan 0 is. Voor negatieve getallen wordt in de binaire voorstelling van alle bits het complement genomen en bij het zo ontstane binaire getal 1 opgeteld.
De getallen kunnen in two's-complement met bits worden voorgesteld. Voor een positief getal is de binaire voorstelling
van de bitrij gelijk aan en is . Voor het bepalen van de bitrij behorend bij een negatief getal moet de absolute waarde van worden afgetrokken.
In formule:
Hieruit volgt dat het gehele getal dat wordt voorgesteld door de bitrij , wordt gegeven door
waarbij feitelijk als tekenbit wordt gebruikt.
Alternatief kan worden geschreven:
Men ziet daaruit dat in two's complement elke bit behalve de meest significante de gewone macht van 2 als bijdrage vertegenwoordigt, dus van laag naar hoog 1, 2, 4, 8, ..., maar dat de meest significante een negatieve bijdrage betekent.
Het tegengestelde van het positieve getal dat wordt voorgesteld door de rij met tekenbit 0 en waarde-bits, bestaat uit de bitrij die verkregen wordt als het verschil, in het binair talstelsel, van de bitrij bestaande uit 0-en en een 1 als extra bit ervoor geplaatst, met de oorspronkelijke bitrij . Met 8 bits wordt bijvoorbeeld het positieve getal 79 voorgesteld door 01001111 en −79 door 10110001. Tellen we beide op volgens de normale optelling in het binaire talstelsel, dan krijgen we als som de rij 100000000=29 (9 bits), die overigens zelf in de 8-bits representatie niet voorkomt.
In two's complement is er een representatie voor het getal 0.
Uit het bovenstaande kan afgeleid worden dat de representatie van een negatief getal in 2-complement verkregen wordt door bij de representatie in one's complement 1 op te tellen: −79 in 1-complement (8 bits) 10110000; tel er 1 bij op: 10110000 + 00000001 = 10110001, de voorstelling van −79 in 2-complement.
Net als bij 1-complement wordt bij 2-complement de meest significante bit gebruikt om aan te geven of een getal positief is of negatief. Deze meest significante bit heeft echter een andere betekenis dan bij 1-complement: in plaats van de rol van een soort minteken te vervullen, staat de meest significante bit (zeg, bit nummer ) voor . De rest van de bits wordt "normaal" geïnterpreteerd en een negatief getal wordt dan ook gevormd door de positieve waarde van de minder significante bits op te tellen bij .
De relatie tussen positieve en negatieve waarden is als volgt:
- Zij een bitrij die de waarde representeert. Dan is (met dezelfde definitie voor complement van een bit als bij 1-complement) de bitrij die representeert gelijk aan .