Negatieve getallen
Last updated
Was this helpful?
Last updated
Was this helpful?
Je hebt geleerd hoe je decimale getallen kunt omzetten naar binaire getallen. We hebben toen alleen gewerkt met positieve gehele getallen (positive integers), maar hoe kun je nou negatieve getallen opslaan?
We noemen getallen waarbij we alleen positieve getallen gebruiken: unsigned.
Bekijk hieronder de meest voorkomende manieren om negatieve getallen weer te geven in computers.
De eerste manier om negatieve getallen weer te geven is door alleen het eerst bit te veranderen. Is het eerste bit een 1 dan stelt het een negatief getal voor. We doen de voorbeelden nu voor 4 bits getallen.
Dus 0100 (4) wordt dan 1100 (-4) en 0110 (6) wordt dan 1110 (-6). Als je alle getallen opschrijft krijg je:
Getal binair
Getal decimaal
1111
-7
1110
-6
1101
-5
1100
-4
1011
-3
1010
-2
1001
-1
1000
-0
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
Je ziet dat er twee soorten 0 zijn. 0 en -0. Dat is niet handig. Bovendien werkt optellen met negatieve getallen niet zoals we gewend zijn. We proberen -2 + 1 uit te rekenen. Dat is dan:
1010 0001 --------+ 1011
En dit is -3 ?? Dus we moeten dan ook op een andere manier gaan optellen. Niet altijd handig.
Een iets betere variant krijgen we als we ones complement gebruiken. Ja maakt dan negatieve getallen door alle bits te 'flippen'. Alle 0-en zetten we om in 1 en alle 1-en zetten we om in 0. Dan krijg je de volgende tabel:
Getal binair
Getal decimaal
1000
-7
1001
-6
1010
-5
1011
-4
1100
-3
1101
-2
1110
-1
1111
-0
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
We hebben dan nog steeds twee keer een 0. En met optellen gaat het iets beter. Kijk maar eens:
-6 + 2 geeft 1001 0010 --------+ 1011
Dus -4! En -3 + 1 geeft 1100 0001 --------+ 1101
Dus -2!! Maar het klopt nog niet helemaal want als we uitrekenen -3 + 5 geeft dat:
1100 0101 --------+ 10001 het meest linke bit negeren we dus 0001 dus 1.
-2 + 7 geeft dat:
1101 0111 --------+ 10100 het meest linke bit negeren we dus 0100 dus 4.
Je ziet dat we er net 1 naast zitten. Dat kunnen we oplossen en doen we in de laatste manier van negatieven getallen noteren.
Om negatieve getallen in twos complement te krijgen doen we: - flip alle bits - tel 1 op bij de uitkomst.
Dus 0101 (5) geeft 1010 en vervolgens 1011. De tabel is dan:
Getal binair
Getal decimaal
1000
-8
1001
-7
1010
-6
1011
-5
1100
-4
1101
-3
1110
-2
1111
-1
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
We hebben nu meteen het probleem van de dubbele 0 opgelost! En optellen gaat helemaal zoals we gewend zijn:
Als we uitrekenen -3 + 5 geeft dat:
1101 0101 --------+ 10010 het meest linker bit negeren we dus 0010 dus 2! Je kunt dit ook controleren voor andere waarden.