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 eller kommentarer til artikkelen?

Kommentaren din vil bli publisert under artikkelen, og fagansvarlig eller redaktør vil svare når de har mulighet.

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