2's Compliment

Gezien je voor een richting electronica gekozen hebt, gaan we er van uit dat je geen schrik hebt van binaire getallen. Hopelijk zie je dat 0b1010 hetzelfde is als 0xA, of tien zoals men in de volksmond zegt. Hieronder vind je nog een overzichtstabel voor de eerste 16 natuurlijke getallen.

DecBinHexDecBinHexDecBinHexDecBinHex
00b00x0 40b1000x4 80b10000x8 120b11000xC
10b10x1 50b1010x5 90b10010x9 130b11010xD
20b100x2 60b1100x6 100b10100xA 140b11100xE
30b110x3 70b1110x7 110b10110xB 150b11110xF

Merk op dat alle 16 mogelijkheden binair te vervatten zijn in 4 tekens (=digits). In het geval dat de voorstelling korter is dan 4 digits, kunnen we altijd 0-en toevegen aan de linkerkant.

Stel dat we de verzameling van natuurlijke getallen willen uitbreiden naar de gehele getallen, hebben we ook negatieve getallen nodig. De meest gebruikte manier om negatieve getallen weer te geven is met behulp van 2’s compliment. De conversie naar 2’s complement kan bekomen worden door de binaire voorstelling te inverteren en dan 1 bit op te tellen. Merk op dat de terugomzetting van 2’s complement bekomen kan worden met dezelfde conversietechiek.

DecimaalBinair DecimaalBinair
10b0001 -10b1111
20b0010 -20b1110
30b0011 -30b1101
40b0100 -40b1100
50b0101 -50b1011
60b0110 -60b1010
70b0111 -70b1001

In tegenstelling tot bij de natuurlijke getallen, kunnen hier niet de breedte verlengen door links nullen toe voegen. In het kort kan gezegd worden dat je MSB kunt herhalen aan de linkerkant.

Wat is het effect van 2’s complement op ? Juist, ja: 0.

Tenslotte dient er nog even gemeld te worden dat de conversie ook op een andere manier kan gebeuren: verminder het getal met 1 en voer dan een bits-gewijze inversie uit.

Add/sub

Eén van de mogelijke ALU instructies is f(x,y) = x-y. Wiskundig gezien weten wechter dat: x - y = x + (-y). Dus in het kort kan je stellen dat een aftrekking hetzelfde is als een optelling met de negatieve waarde.

Hadden jullie nu net geen Ripple Carry Adder gemaakt? #Chance-ke.