Repræsentationer af tal med fortegn bruges til at løse problemet med at repræsentere negative heltal i binære tal. Problemet ved at forsøge at gemme det negative tegn (-) i et binært tal er, at der ikke er nogen tilstande tilbage, som kan bruges til at repræsentere den negative tildeling. Det er ikke muligt blot at bruge "off" for minus og "on" for plus, fordi computeren ikke ville have nogen mulighed for at vide, om det var et tal eller et tegn.

For at løse dette problem opfandt computerdesignere to almindelige metoder til lagring af negative binære tal: tegn-og-størrelse (sign-and-magnitude) og 2's komplement. Begge giver alternative repræsentationer for tal med fortegn, men de har forskellige egenskaber, fordele og ulemper.

Tegn-og-størrelse (sign-and-magnitude)

I tegn-og-størrelse bruges én bit (typisk den mest betydende bit) til at angive tegnet: 0 for positivt og 1 for negativt. De resterende bits angiver størrelsen (magnitude) af tallet i almindelig binær form.

Eksempel for 4-bit repræsentation:

  • +5 = 0 101
  • -5 = 1 101
  • +3 = 0 011
  • -3 = 1 011

Bemærkninger:

  • To repræsentationer af nul: både +0 (0 000) og -0 (1 000) eksisterer, hvilket er upraktisk i beregninger.
  • Intervallet: for n bits er intervallet fra -(2^(n-1)-1) til +(2^(n-1)-1).
  • Regneoperationer: addition og subtraktion bliver mere komplicerede, fordi man må tage hensyn til tegnet og ofte skifte til forskellige procedurer afhængigt af, om operandernes tegn er ens eller forskellige.

2's komplement

2's komplement er den mest udbredte metode i moderne computere. Her kodes negative tal ved at tage den bitvise negation af tallets absolutte værdi og derefter lægge 1 til. Et vigtigt resultat er, at hver heltalværdig kode repræsenterer ét unikt tal — der er kun ét nul.

Sådan danner man 2's komplement af et positivt tal:

  1. Find binær repræsentation af absolutværdien i n-1 bits.
  2. Hvis tallet skal være negativt: invertér alle bits og addér 1.

Eksempel for 4-bit repræsentation:

  • +5 = 0101
  • -5: invertér 0101 → 1010, læg 1 til → 1011 (dvs. -5 = 1011)
  • 0 = 0000 (kun én nul)

Væsentlige egenskaber:

  • Intervallet: for n bits går intervallet fra -2^(n-1) til 2^(n-1)-1. For eksempel i 8-bit: -128 til 127.
  • Enkelt nul: kun én repræsentation af nul (0000...0).
  • Enkle aritmetiske operationer: addition og subtraktion kan udføres med samme binære addere som for usignerede tal; negative tal håndteres automatisk af repræsentationen (dog skal man være opmærksom på overflow).
  • Overflow-detektion: ved addition i 2's komplement opstår overflow, hvis carry ind i fortegnsbit er forskellig fra carry ud af fortegnsbit. Alternativt: hvis to positive tal giver negativt resultat, eller to negative tal giver positivt resultat.
  • Sign-udvidelse: når man udvider et tal til flere bits (fx fra 8 til 16), kopierer man fortegnsbit for at bevare værdien (sign-extension).

Sammenligning og praktiske konsekvenser

  • Hvorfor 2's komplement oftere bruges: det har kun ét nul og tillader enklere og hurtigere hardware for aritmetik. Dette gør det til standarden i næsten alle moderne processorer.
  • Tegn-og-størrelse kan være intuitivt: det matcher menneskelig idé om "et tegn og en absolutværdi", men det fører til komplicerede aritmetiske regler og dobbelt nul, hvilket gør det mindre egnet til maskinnær beregning.
  • Når man vælger bitlængde: husk intervallet for den valgte repræsentation. I 8-bit 2's komplement kan du fx repræsentere -128 — 127, mens tegn-og-størrelse kun når -127 — +127 med to nulpunkter.

Eksempel på addition i 2's komplement

Tag 4-bit talene +6 (0110) og -3 (1101).

  • 0110 (+6)
  • 1101 (-3)
  • Sum (binært add): 0110 + 1101 = 10011 → med 4 bits resultatet 0011 (ignorer overflødig carry ud), hvilket er +3. Det er korrekt: 6 + (-3) = 3.

Praktiske tips

  • Ved programmering på lavt niveau eller når du arbejder med binære protokoller, vær opmærksom på hvilken repræsentation (signed/unsigned) datasættet bruger.
  • Ved konvertering mellem bitlængder, brug sign-extension for signed tal i 2's komplement for at bevare tallets værdi.
  • For fejlsøgning af overflow: i maskinkode kontrolleres ofte processorens overflow-flag (V eller OF) eller kontrol af carry ind/ud i fortegnsbit.

Samlet set er både tegn-og-størrelse og 2's komplement måder at løse problemet med at repræsentere negative tal i binære systemer. 2's komplement er dog den praktisk foretrukne metode i næsten alle moderne systemer på grund af sin effektivitet og enklere aritmetik.