Heltall er alle naturlige tall (1, 2, 3, 4...) og deres negative verdier (-1, -2, -3, -4...), samt 0. Heltall omfatter altså ikke tall med desimaler. I datamaskiner lagres (representeres) heltall som et antall binære siffer (0,1) i to-tallsystemet. Ett siffer lagres i én bit. Hvilket verdiområde som dekkes (altså fra minste til største tall) bestemmes av antall bits (normalt 8 bit, 16 bit, 32 bit eller 64 bit) og om det skal lagre bare positive heltall, eller både positive og negative heltall. Negative heltall kan lagres på tre forskjellige måter, og «komplementær to-form» har blitt den dominerende metoden. 

Lagringsformatet (representasjonen) har betydning når data deles og flyttes mellom maskiner. 

I digital representasjon er grunntallet 2 og et binært siffer kan ta to verdier: 0 og 1. Vekten til et siffer bestemmes av sifferets posisjon i det binære tallet, og er \(2^p\)  hvor \(p\) er posisjon. En starter med posisjon 0 som er lengst til høyre i tallet. Vekten dobles for hver posisjon en går til venstre. 

Figuren under viser hvordan tallet 75 kan representeres binært som 01001011 ved hjelp av 8 bit. 

 \( \begin{array}{ccccccccl} 7&6&5&4&3&2&1&0& \texttt{ posisjon}\\ 2^7&2^6&2^5&2^4&2^3&2^2&2^1&2^0& \texttt{ vekt}\\ 128&64&32&16&8&4&2&1& \texttt{ vekt, desimaltall}  \\ 0&1&0&0&1&0&1&1& \texttt{ binærtall: 64+8+2+1=75}  \end{array} \) 

Operasjonen addisjon er sentral fordi operasjonen subtraksjon også kan løses ved addisjon. Eksempel: \( 7 - 3 \equiv 7+(-3) = 4 \). Tegnet \( \equiv \) leses som «ekvivalent med» eller «er det samme som». 

Under viser vi to eksempler på addisjon av binære tall:

 \( \begin{array}{r@{:}cccccr} \texttt{mente} & &\tiny{1} & \tiny{1} & \tiny{1} & & \texttt{dv} \\  &&0&1&1&1 & 7 \\ \texttt{+} &&0&1&0&1&5\\ \texttt{sum} &&1&1&0& 0 & 12 \end{array}  \texttt{        } \begin{array}{r@{:}cccccr} \texttt{mente} & \tiny{1} &\tiny{1} & \tiny{0} & \tiny{1} & & \texttt{dv} \\  &&1&1&0&1 & 13 \\ \texttt{+} &&0&1&0&1&5\\ \texttt{sum} &1&0&0&1& 0 & 18(2) \end{array} \)  

Kolonnene med overskrift \( \texttt{dv} \) viser binærtallets desimale verdi. I det siste eksemplet har vi addert to tall som gir et større resultat enn det er plass til i fire bit. Denne situasjonen kalles overflyt, som er direkte oversatt fra engelske «overflow».  Ved overflyt får en ikke riktig resultat, derfor står det 2 i parentesen etter 18. CPU-er har en egen instruksjon som kan teste om siste addisjon har gitt overflyt.

Tall i tekst er lagret som tekst, det vil si at hvert tegn har sin tegnkode. I tegnsettet ASCII har de desimale sifrene 0 til 9 tegnkodene fra 48 til 57. Før en skal gjøre beregninger med tall på tekstlig form er det nødvendig å konvertere fra desimal til binær form, altså en konvertering fra et tall i ti-tallsystemet til et tall i to-tallsystemet.

En enkel og praktisk huskeregel er at ti binære sifre gir omtrent tre desimale sifre. Med ti bit kan vi lagre tall opp til 1000. Med 20 bit er største tallet 1 million og med 30 bit er største tallet 1 milliard.  

Alle sifferposisjoner brukes til å bestemme tallverdien. Et binært tall med \(n\) siffer kan representere verdier i området \( 0 \texttt{ til } 2^n-1 \). For vanlige ordlengder får vi da følgende verdiområder:

Verdiområder for positive heltall
antall siffer verdiområde datatype
8 0 til 255 char
16 0 til 65 535 ushort
32 0 til 4 294 967 295 uint
64 0 til 18 446 744 073 709 551 615 ulong

Når en lagrer negative og positive heltall tolkes mest signifikante bit (høyeste posisjon) som fortegn: 0 for positive heltall og 1 for negative heltall. 

Negative tall kan representeres på tre måter:

  1. Fortegn pluss verdi
  2. Invertering av den positive ekvivalent
  3. «Two's complement» (komplementær to-form)

Fortegnet er negativt (1) de andre bitene brukes på vanlig måte til å representere tallets verdi. For eksempel -2 skrives slik: 1 010.

Dette innebærer at alle bitene inverteres: 0 blir 1 og 1 blir 0. Tallet 2 skrives slik binært når vi bruker fire bit: 0010. -2 blir da: 1101.  Denne lagringsformen fører også til at en får to verdier for 0: 0000 = +0 og 1111= -0.  

Lagringsformen kalles «one's complement» eller «komplementær en-form», og ble brukt av datamaskiner som var vanlige i Norge i perioden 1960-1990, for eksempel UNIVAC 1100-serien, CDC 3000 og 6000 seriene og PDP-1. 

Det negative tallet representeres som den inverterte formen («one's complement») pluss 1. Dermed unngår man åpentbart to former for 0, og i tillegg får en enklere elektronikk for å utføre de vanlige regneoperasjonene addisjon og subtraksjon.

La oss først se på representasjonen av -2:

 \( \begin{array}{r@{:}ccccl} +2 &0&0&1&0& \\  \bar{2} &1&1&0&1& \texttt{invertert}\\+1 &0&0&0&1& \texttt{adder 1}\\=-2 &1&1&1&0& \\ \end{array} \)

Den positive ekvivalenten av -2 som er +2 blir først invertert, deretter adderes 1 til det inverterte tallet.

For å demonstrere at lagringsformen fungerer viser vi to eksempler. Først adderer vi 4 og -2:

 \( \begin{array}{r@{:}cccc} 4&0&1&0&0 \\ +(-2) &1&1&1&0\\ =2&0&0&1&0 \end{array} \) 

Og en ny test: -2+(-2):

 \( \begin{array}{r@{:}cccc} -2&1&1&1&0\\ +(-2)&1&1&1&0\\ =-4&1&1&0&0  \end{array} \)  

Komplementær to-form har blitt den dominerende måte å lagre heltall på. Både addisjon og subtraksjon kan utføres som addisjon når heltall er lagret på denne måten. Norsk Data AS (1967-1992) sine Nord-maskiner lagret heltall ved hjelp av komplementær to-form. 

Med \(n\) bit til rådighet er tallområdet \( \pm 2^{n-1}-1\) for de to lagringsformatene: lagring med fortegn pluss absoluttverdi og komplementær en-form. Verdiområdet med komplementær to-formlagring er \( -2^{n-1} \) til  \( 2^{n-1}-1\).

Foreslå endringer i tekst

Foreslå bilder til artikkelen

Kommentarer

Har du spørsmål om artikkelen? Skriv her, så får du svar fra fagansvarlig eller redaktør.

Du må være logget inn for å kommentere.