Heltal (Computer)
Hvordan heltal (på engelsk integer) bliver repræsenteret internt i computeren afhænger af programmeringssprog, computerteknologi og computeralder. Disse ting har også betydning for hvor store tal computeren kan håndtere.
Intern repræsentation
[redigér | rediger kildetekst]I moderne computere bliver heltal oftest gemt som 2s-komplement eller en streng af tegn, visse ældre computere benyttede 1s-komplement. Dette afhængig blandt andet af programmeringssproget. I programmeringssproget C bliver heltalsværdier gemt som 2s-komplement. Afhængig af programmeringssproget vil der være grænser for hvor store og små tal man kan regne med. I programmeringssproget LISP er der ingen begrænsning på størrelsen af heltal.
Når tallet bliver gemt som 2s-komplement er der afsat fast størrelse på forhånd og størrelsen vil da være begrænset til 2^15 (-32768..32767), 2^23 (-8.388.608..8.388.607), 2^31 (-2.147.483.648..2.147.483.647), 2^63 (-9.223.372.036.854.775.808..9.223.372.036.854.775.807) eller 2^127 afhængig af antallet af bits. I gamle computer er BCD (tal) repræsentation også anvendt.
2s-komplement
[redigér | rediger kildetekst]Når et tal er gemt i 2s-komplement kaldes den mest betydende bit fortegnsbitten. Et "0" indikerer at tallet er positivt, et "1" at det er negativt. Hvis man har 8 bit til rådighed kan man repræsentere tal i området -128..127. Uanset antallet af bit vil man kunne repræsentere en negativ værdi hvis absolutte værdi er en større end den tilsvarende største positive værdi.
1s-komplement
[redigér | rediger kildetekst]I 1s-komplement fås et negativt tal ved at invertere alle bittene i det tilsvarende positive tal. Den mest betydende bit er ligesom i 2s-komplement fortegnsbitten. Fordelen ved 1s-komplement er at man kan repræsentere lige mange negative og positive tal, med 8 bit -127..127. Ulempen er at man får en dobbelt repræsentation af 0 (nemlig 0 og -0).
Tegnstrengs repræsentation
[redigér | rediger kildetekst]Når tallet gemmes i en tegnstreng vil hver ciffer i tallet (10 tals system) optage et tegn i tegnstrengen. Tegnstrengen vil være indkodet i samme tegnsæt som i øvrigt anvendes på computeren. I eksemplerne nedenfor anvendes ASCII alfabetet.
BCD repræsentation
[redigér | rediger kildetekst]BCD er en teknik hvor tallet gemmes i et ti-tals talsystem. Hver ciffer fylder 4 bit svarende til bitværdierne (0000..1001). Bitværdien for 12 (1100) kan benyttes til at angive at tallet er positivt, medens bitværdien for 13 (1101) benyttes til at angive negative tal, disse 'fortegn' kan skrives enten som det første eller sidste ciffer i tallet. De øvrige bitværdier (1010, 1011, 1110 og 1111) udnyttes ikke. Fordelen ved BCD er at det meget let at udlæse værdien, men det er mindre effektivt ved beregninger. Teknikken er en gammel teknik som ikke anvendes ret meget i dag.
Eksempler
[redigér | rediger kildetekst]Heltal | 2s-komplement (8 bit) | 2s-komplement (16 bit) | 1s-komplement (8 bit) | 1s-komplement (16 bit) | Tegnstreng (ASCII) | BCD |
---|---|---|---|---|---|---|
+169 | - | 0000.0000.1010.1001 | - | 0000.0000.1010.1001 | ('+') '1' '6' '9' (0010.1011) 0011.0001 0011.0110 0011.1001 |
(1100) 0001 0110 1001 0001 0110 1001 (1100) |
+17 | 0001.0001 | 0000.0000.0001.0001 | 0001.0001 | 0000.0000.0001.0001 | ('+') '1' '7' (0010.1011) 0011.0001 0011.0111 |
(1100) 0001 0111 0001 0111 (1100) |
+2 | 0000.0010 | 0000.0000.0000.0010 | 0000.0010 | 0000.0000.0000.0010 | ('+') '2' (0010.1011) 0011.0010 |
(1100) 0010 0010 (1100) |
0 | 0000.0000 | 0000.0000.0000.0000 | 0000.0000 1111.1111 |
0000.0000.0000.0000 1111.1111.1111.1111 |
'0' 0011.0000 |
0000 |
-2 | 1111.1110 | 1111.1111.1111.1110 | 1111.1101 | 1111.1111.1111.1101 | '-' '2' 0010.1101 0011.0010 |
1101 0010 0010 1101 |
-17 | 1110.1111 | 1111.1111.1110.1111 | 1110.1110 | 1111.1111.1110.1110 | '-' '1' '7' 0010.1101 0011.0001 0011.0111 |
1101 0001 0111 0001 0111 1101 |
-169 | - | 1111.1111.0101.0111 | - | 1111.1111.0101.0110 | '-' '1' '6' '9' 0010.1101 0011.0001 0011.0110 0011.1001 |
1101 0001 0110 1001 0001 0110 1001 1101 |