Tilbake
1.3

1.3 To-er komplement og byte-tolkning

Samme 8-bits mønster har to tolkninger — uten fortegn og med fortegn (2-er komplement) — pluss byte-addisjon med overflyt.

45 min
9 oppgaver
To-er komplementbyte-tolkning
Din fremgang i kapitlet
0 / 9 oppgaver
Kapitlets plass i kurset

Forkunnskaper — sist du var her

Dette kapitlet bygger på kap. 1.1. Her er det du trenger, ferdig oppfrisket:

1. Plassverdiregelen i binærtall. Vektene fra høyre er 1, 2, 4, 8, 16, 32, 64, 128. Verdien er summen av vektene der bitet er 1.

bit:    1    0    1    0    1    1    0    0
vekt:  128   64   32   16    8    4    2    1

2. En byte er åtte bit og skrives som to heksadesimale sifre. 10101100₂ = 0xAC.

3. Toerpotensene: 1, 2, 4, 8, 16, 32, 64, 128, 256.

Det ene nye tallet i dette kapitlet er 256, altså 282^8 — antall verdier en byte kan ha.

Har du sett binærtall for første gang i kap. 1.1, er du klar. Trenger du en roligere inngang, ligger den i Tallsystemer og datarepresentasjon.

Notasjons- og konstruksjonsliste

Løkke 1 — Én byte, to lovlige svar (~12 min)

Tenk på et termometer som sender målinger over en ledning. Det kan bare sende åtte bit av gangen, og det sender 10101100.

Hva er temperaturen? Svaret avhenger av en avtale mellom sender og mottaker som ikke ligger i bitene: skal tallet leses som en verdi mellom 0 og 255, eller som en verdi mellom −128 og 127?

Er avtalen «uten fortegn», er svaret 172 grader. Er den «med fortegn», er svaret −84 grader. Begge er riktige lesninger av det samme mønsteret.

Dette er hele poenget med kapitlet: bitmønsteret bærer ikke sin egen tolkning. Og på eksamen betyr det at et spørsmål ofte har to riktige svar samtidig.

Usignert tolkning (uten fortegn)

Lesningen der alle åtte bit har positiv vekt, etter vanlig plassverdi: 128, 64, 32, 16, 8, 4, 2, 1.

Verdiområdet er 0 til 255 — altså 28=2562^8 = 256 ulike verdier.

Denne tolkningen brukes for størrelser som aldri kan være negative: antall, adresser, fargekomponenter, tegn.

Den faste feilslutningen: å tro at dette er «den riktige» tolkningen fordi det er den enkleste. Uten en avtale om tolkning er begge like gyldige.

📜To-er komplement på 8 bit
Regelen: det mest signifikante bitet (b7b_7) får vekten −128 i stedet for +128. De sju andre beholder sine vanlige, positive vekter.

Nsignert=b727+i=06bi2iN_{\text{signert}} = -\,b_7 \cdot 2^{7} + \sum_{i=0}^{6} b_i \cdot 2^{\,i}

bit:    1     0    1    0    1    1    0    0
vekt: -128   64   32   16    8    4    2    1

Konsekvenser du skal kunne uten å tenke:

- Er b7=0b_7 = 0, er tallet positivt, og de to tolkningene gir samme verdi. 01011010₂ er 90 uansett.
- Er b7=1b_7 = 1, er tallet negativt, og du finner verdien raskest ved å ta den usignerte verdien og trekke fra 256.
- Verdiområdet er −128 til 127. Det er 256 verdier, akkurat som uten fortegn — bare forskjøvet.
- Området er usymmetrisk: −128 finnes, men +128 finnes ikke. Det er én negativ verdi mer enn positive, fordi null tar plassen til den ene positive.

Hvorfor akkurat denne konstruksjonen? Fordi den lar samme addisjonskrets brukes for både positive og negative tall. Legger du 11110000₂ (−16) og 00010000₂ (16) sammen bit for bit, får du 00000000₂ — null, uten at maskinen trenger å vite noe om fortegn.

Fortegnsbit

Det mest signifikante bitet (b7b_7 i en byte), som ved signert tolkning avgjør om tallet er negativt.

Er bitet 0, er tallet null eller positivt. Er det 1, er tallet negativt.

Merk formuleringen: bitet er ikke bare et fortegn — det bærer også vekten −128. Å behandle det som et rent fortegnsmerke og lese de sju andre bitene som tallverdien er en klassisk feil: 10101100₂ er ikke «minus 44», men −128 + 44 = −84.

✏️Eksempel 1: Begge tolkningene av samme byte

En sensor sender byten 10101100. Hva er verdien, tolket uten fortegn og med fortegn?

Uten fortegn. Vektene der bitet er 1: 128, 32, 8, 4.

128 + 32 + 8 + 4 = 172.

Med fortegn. Det øverste bitet er 1, så det bidrar med −128 i stedet for +128. De øvrige er uendret:

−128 + 32 + 8 + 4 = −84.

Snarveien: siden fortegnsbitet er satt, kunne vi ha regnet 172 − 256 = −84 direkte. Det er ett regnestykke i stedet for fire.

Svar: 10101100₂ er 172 uten fortegn og −84 med fortegn.

Begge er riktige. Spør oppgaven «hvilke av disse verdiene kan byten representere?», skal begge krysses av.

📝Oppgave 1

(Innsteg — to tolkninger.) Oppgi begge tolkningene av 11110000₂.

📝Oppgave 2
Sjanger B

Hvilke av disse bytene gir samme verdi enten du tolker dem med eller uten fortegn?

a) 01011010₂

b) 10000000₂

c) 00101101₂

d) 11111111₂

Verdiområdene for en byte

Åtte bit gir alltid 256 ulike mønstre. Hvordan de fordeles på tallinja, avhenger av tolkningen:

TolkningMinsteStørsteAntall
Uten fortegn0255256
Med fortegn (to-er komplement)−128127256

Grensemønstrene er verdt å kunne utenat: 00000000₂ er 0 i begge, 01111111₂ er 127 i begge, 10000000₂ er 128 uten fortegn og −128 med, og 11111111₂ er 255 uten fortegn og −1 med.
Den faste feilslutningen: å tro at signert tolkning «mister» en verdi. Antallet er det samme — området er bare forskjøvet.

Løkke 2 — Å bytte fortegn: inverter og legg til én (~10 min)

Hvordan skriver du −45 som en byte? Du kan regne −45 + 256 = 211 og konvertere 211. Det virker, men det er tungvint.

Den mekaniske metoden er raskere og er den du skal bruke under tidspress.

📜Negasjon i to-er komplement: inverter og legg til 1
For å finne bitmønsteret til N-N når du har mønsteret til NN:

1. Inverter alle åtte bit (hvert 0 blir 1, hvert 1 blir 0).
2. Legg til 1 binært.

N=¬N+1-N = \neg N + 1

Metoden virker begge veier: bruker du den to ganger, er du tilbake der du startet.

Hvorfor den virker. Inverteringen gir deg 255N255 - N. Legger du til 1, får du 256N256 - N — og det er nettopp mønsteret som tolkes som N-N i to-er komplement, siden signert verdi er usignert verdi minus 256.

Den ene fallgruva: 10000000₂ er −128, og inverterer du og legger til 1, får du 10000000₂ tilbake. Det er ikke en feil — det er asymmetrien i verdiområdet. +128 finnes ikke i en signert byte, så −128 har ingen positiv motpart.

✏️Eksempel 2: Skriv −45 som en byte

Skriv −45 som en byte i to-er komplement, og kontroller svaret.

Steg 1 — skriv 45 binært. 45 er 32 + 8 + 4 + 1, altså 00101101.

Steg 2 — inverter.

00101101   ->   11010010

Steg 3 — legg til 1.

  11010010
+        1
----------
  11010011

Svar: −45 er 11010011₂ = 0xD3.

Kontroll 1, via snarveien: 11010011₂ uten fortegn er 128 + 64 + 16 + 2 + 1 = 211. Med fortegn: 211 − 256 = −45. Stemmer.

Kontroll 2, ved å negere tilbake: inverter 11010011 og få 00101100, legg til 1 og få 00101101 = 45. Stemmer.

📝Oppgave 3
Sjanger B

Skriv −90 som en byte, og oppgi svaret både binært og heksadesimalt.

📝Oppgave 4
Sjanger B

Hva er −1 som byte, og hva er −128? Forklar hvorfor den ene av dem oppfører seg spesielt under negasjon.

Løkke 3 — Addisjon i åtte bit: mente og overflyt (~15 min)

Nå kommer den delen som gir flest bom. Å legge sammen to byte er enkelt — du legger sammen bit for bit med mente, akkurat som i titallssystemet. Det vanskelige er å avgjøre om svaret er til å stole på.

Åtte bit rommer 256 verdier. Legger du sammen to tall der summen ikke får plass, blir svaret feil — men maskinen gir ingen advarsel. Den skriver bare de åtte nederste bitene og går videre.

📜Byte-addisjon
Regelen: legg sammen bit for bit fra høyre, med mente videre til neste posisjon. Behold nøyaktig åtte bit i svaret — et eventuelt niende bit faller ut.

mente:   1 1 1 1 1 1 0 0     <- menten inn i hver posisjon
         0 1 0 1 1 0 1 0     (90)
       + 0 0 1 1 0 1 1 1     (55)
       -------------------
         1 0 0 1 0 0 0 1

Bit-for-bit-reglene: 0+0 = 0, 0+1 = 1, 1+1 = 0 med mente 1, og 1+1+1 = 1 med mente 1.

Oppgi begge tolkningene av svaret når oppgaven ber om det: 10010001₂ er 145 uten fortegn og 145 − 256 = −111 med fortegn.

Ikke regn med flere enn åtte bit. Det er den vanligste mekaniske feilen: man lar svaret bli ni bit langt og oppgir en verdi over 255.

Mente

Sifferet som overføres til neste bitposisjon når summen i en posisjon ikke får plass i ett bit.

1 + 1 er 10₂, altså 0 i posisjonen og mente 1 videre. 1 + 1 + 1 er 11₂, altså 1 i posisjonen og mente 1 videre.

To menter har egne navn og egne roller i overflytsregelen: menten inn i bit 7 (fra posisjon 6) og menten ut av bit 7 (som faller ut av byten). Ikke bland dem — det er nettopp forholdet mellom dem som avgjør om resultatet er gyldig.

Overflyt

At resultatet av en regneoperasjon ikke får plass i verdiområdet tolkningen tillater, slik at den lagrede verdien blir feil.

Ved signert tolkning oppstår overflyt når menten inn i bit 7 er forskjellig fra menten ut av bit 7. Er de like, er svaret gyldig.

Ved usignert tolkning er kriteriet et annet: overflyt oppstår når det er mente ut av bit 7, altså når summen passerer 255.

Den faste feilslutningen: å tro at «mente ut» alltid betyr overflyt. Legger du sammen to negative tall i to-er komplement, er mente ut helt normalt — og svaret er riktig så lenge menten inn også er 1.

✏️Eksempel 3: Overflyt som ikke ser ut som overflyt

Regn ut 01011010₂ + 00110111₂ i åtte bit. Oppgi begge tolkningene av svaret, og avgjør om resultatet er gyldig.

Addisjonen.

mente:  1 1 1 1 1 1 0 0
        0 1 0 1 1 0 1 0     (90)
      + 0 0 1 1 0 1 1 1     (55)
      -----------------
        1 0 0 1 0 0 0 1

Svaret er 10010001₂. Uten fortegn er det 128 + 16 + 1 = 145. Med fortegn er det 145 − 256 = −111.

Er svaret gyldig?

Usignert: vi la sammen 90 og 55 og fikk 145. Det er under 255, og det er ingen mente ut av bit 7. Svaret er riktig.

Signert: begge operandene var positive (90 og 55), men svaret er negativt (−111). Det kan umulig stemme. Sjekk kriteriet: menten inn i bit 7 er 1 (den kom fra posisjon 6), mens menten ut av bit 7 er 0. De er ulike, altså overflyt.

Poenget: samme regnestykke, samme bitmønster — gyldig i den ene tolkningen, ugyldig i den andre. Riktig sum 145 finnes ikke i det signerte området, som stopper på 127.

Dette er den fella oppgavene liker: to positive tall som gir et negativt svar. Ser du det mønsteret, har du signert overflyt.

📝Oppgave 5
Sjanger B

Regn ut 01100100₂ + 01010000₂ i åtte bit. Oppgi begge tolkningene av svaret, og avgjør om det er signert overflyt.

📝Oppgave 6
Sjanger B

Regn ut 10010110₂ + 11101011₂ i åtte bit. Er det signert overflyt?

📝Oppgave 7
Sjanger B

Regn ut 11110000₂ + 00010000₂ i åtte bit, og forklar hva regnestykket viser om to-er komplement.

Løkke 4 — Eksamensformen (~8 min)

Sjangeren kommer nesten alltid som en liste påstander om ett bitmønster, der du skal krysse av alle som stemmer. Under negativ poenggiving betyr det at du må vurdere hvert alternativ og kunne si hvorfor de gale bommer.

✏️Eksempel 4: Eksamensform — kryss av alle som stemmer

Svarform F1. Byten 11001001₂ er gitt. Kryss av alle alternativene som stemmer.

a) Verdien er −73 med fortegn.

b) Verdien er −55 med fortegn.

c) Verdien er 201 uten fortegn.

d) Byten er 0xC9.

a) Galt. −73 ville svart til den usignerte verdien −73 + 256 = 183, altså 10110111₂. Det er et annet bitmønster. Distraktoren er bygd på en klassisk feil: å lese fortegnsbitet som et rent minustegn og de sju resterende bitene som tallverdien. 1001001₂ er 73, så «minus 73» ser plausibelt ut — men fortegnsbitet bærer vekten −128, det er ikke et merke.

b) Riktig. Fortegnsbitet er satt, så 201 − 256 = −55. Kontroll med den lange veien: −128 + 64 + 8 + 1 = −55. Stemmer.

c) Riktig. Vektene 128, 64, 8 og 1 er satt: 128 + 64 + 8 + 1 = 201.

d) Riktig. Nibblene er 1100 og 1001, altså C og 9. Kontroll: 12·16 + 9 = 201. Stemmer.

Fasit: b, c og d.

Legg merke til at tre av fire var riktige, og at den ene gale var den som så mest ut som et fornuftig negativt tall. Det er typisk.

📝Oppgave 8
Eksamensnivå, sjanger B

Kryss av alle alternativene som stemmer for byten 10000001₂, og begrunn hvert av de fire.

a) Verdien er 129 uten fortegn.

b) Verdien er −127 med fortegn.

c) Verdien er −1 med fortegn.

d) Negasjonen er 01111110₂.

📝Oppgave 9
Eksamensnivå, sjanger B

Vurder hver påstand om regnestykket 10000001₂ + 11111110₂ i åtte bit som sann eller usann, og begrunn.

a) Svaret er 01111111₂.

b) Det er signert overflyt.

c) Den signerte summen av operandene er −129.

d) Uten fortegn er svaret 127, og det er riktig.

Begrepsbank til eksamen

Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp har lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder kjernestoffet.

Negasjon i to-er komplement

Å finne bitmønsteret for det motsatte tallet: inverter alle bit og legg til 1.

00101101₂ (45) blir invertert til 11010010₂, og pluss 1 gir 11010011₂ (−45).

Metoden virker begge veier. Den faste feilen er å stoppe etter inverteringen — da har du ener-komplementet, som er én for lite.

Invertering

Å bytte hvert 0 med 1 og hvert 1 med 0 i et bitmønster. Skrives ofte ¬N eller med en strek over navnet.

Inverteringen av en byte gir alltid 255 − N, siden de to mønstrene til sammen har alle åtte bit satt.

Invertering alene er ikke negasjon i to-er komplement — det mangler pluss-én-steget.

Fortegnsutvidelse

Å utvide et signert tall til flere bit ved å gjenta fortegnsbitet i de nye posisjonene, slik at verdien bevares.

11010011₂ (−45 i åtte bit) blir 1111111111010011₂ i seksten bit — fortsatt −45.

Fyller du på med nuller i stedet, endrer du verdien fra −45 til 211. Det er derfor utvidelse av signerte og usignerte tall gjøres ulikt.

Asymmetrien i verdiområdet

At en signert byte har én negativ verdi mer enn positive: området går fra −128 til 127.

Årsaken er at null tar plassen til én av de positive verdiene. De 256 mønstrene fordeles på 128 negative, null, og 127 positive.

Konsekvens: −128 har ingen positiv motpart, og negasjonen av −128 gir −128 tilbake.

Snarveien «minus 256»

Regelen om at den signerte verdien er den usignerte minus 256 når fortegnsbitet er satt.

11001001₂ er 201 usignert, og 201 − 256 = −55 signert.

Snarveien er ett regnestykke i stedet for åtte vektbidrag, og den er derfor den raskeste veien under tidspress. Er fortegnsbitet 0, er de to verdiene like.

Mente inn i bit 7

Menten som kommer fra bitposisjon 6 og legges til i posisjon 7 under en addisjon.

Denne menten er den ene halvdelen av overflytskriteriet for signerte tall.

Den forveksles lett med menten UT av bit 7 — men de to har helt ulik rolle, og det er nettopp forskjellen mellom dem som avgjør om resultatet er gyldig.

Mente ut av bit 7

Menten som faller ut av byten når summen passerer 255. Den lagres ikke i resultatet.

For usignerte tall betyr mente ut alltid overflyt: summen fikk ikke plass.

For signerte tall betyr den ingenting alene. Legger du sammen to negative tall, er mente ut helt normalt, og resultatet er riktig så lenge menten inn også er 1.

Signert overflytskriterium

Overflyt ved signert tolkning oppstår hvis og bare hvis menten inn i bit 7 er forskjellig fra menten ut av bit 7.

En praktisk variant av samme regel: to positive operander som gir negativt svar, eller to negative som gir positivt svar, er alltid overflyt. To operander med ulikt fortegn kan aldri gi overflyt.

Den faste feilen er å bruke det usignerte kriteriet (mente ut) på et signert regnestykke.

Usignert overflytskriterium

Overflyt ved usignert tolkning oppstår når det er mente ut av bit 7, altså når summen overstiger 255.

10010110₂ + 11101011₂ er 150 + 235 = 385, som ikke får plass. Byten inneholder 129, som er 385 minus 256.

Samme regnestykke kan være gyldig signert og ugyldig usignert, eller omvendt — kriteriene er uavhengige.

Subtraksjon som addisjon

At ABA - B regnes ut som A+(B)A + (-B), der B-B finnes ved å invertere og legge til 1.

Dette er grunnen til at en prosessor ikke trenger egen subtraksjonskrets: den samme adderen brukes, med en invertering og et ekstra ett-tall på inngangen.

Du møter samme idé igjen i kap. 2.4, der en fulladder brukes som subtraktor ved å sette mente inn lik 1.

Null i to-er komplement

Null har nøyaktig ett bitmønster: 00000000₂.

Dette er en av grunnene til at to-er komplement vant fram: i eldre representasjoner fantes både «positiv null» og «negativ null», som kompliserte sammenligninger.

Kontroll: negasjonen av null er invertert 11111111 pluss 1, som gir 00000000 med menten ut — altså null igjen.

Minus én som alle bit satt
11111111₂ er 255 uten fortegn og −1 med fortegn.

Dette er verdt å kunne utenat, både fordi mønsteret dukker opp stadig, og fordi det er en rask kontroll på at du har forstått snarveien: 255 − 256 = −1.

Generaliseringen: alle bit satt er alltid −1 i to-er komplement, uansett hvor mange bit du har.

Grensemønstrene i en byte

De fire mønstrene du bør kjenne igjen umiddelbart:

MønsterUsignertSignert
0000000000
01111111127127
10000000128−128
11111111255−1

De to midterste er vippepunktet: 01111111 er den største positive, og neste mønster hopper helt ned til −128.

Ordbredde

Antall bit maskinen behandler under ett. En byte er 8 bit, men prosessorer arbeider også med 16, 32 og 64 bit.

Verdiområdet følger av bredden: med nn bit er signert område 2n1-2^{n-1} til 2n112^{n-1}-1, og usignert 0 til 2n12^n - 1.

Oppgavene i IN1020 bruker gjennomgående 8 bit, men prinsippene er de samme — det er bare vekten på det øverste bitet som endres.

Tolkningskontrakten

At et bitmønster ikke bærer sin egen tolkning: det er avtalen mellom den som skriver og den som leser, som avgjør om 10101100₂ betyr 172 eller −84.

I et program ligger avtalen i datatypen; på eksamen ligger den i oppgaveteksten.

Dette er grunnen til at et spørsmål om en byte ofte har to riktige svar samtidig — og til at du må lese oppgaveteksten nøye for å se om den ber om én tolkning eller begge.

Bit-for-bit-reglene i addisjon

De fire tilfellene du trenger når du legger sammen to byte:

InnSum i posisjonenMente videre
0 + 000
0 + 110
1 + 101
1 + 1 + 1 (med mente inn)11

Den siste raden er den som glemmes: når det allerede ligger en mente inn i posisjonen, kan tre ettall møtes.
Reglene er identiske med det en fulladder gjør i maskinvare, som du møter igjen i kap. 2.4.

To riktige svar samtidig

Situasjonen der en flervalgsoppgave om ett bitmønster har både den usignerte og den signerte verdien blant alternativene — og begge skal krysses av.

Dette er den vanligste formen sjanger B kommer i, fordi den tester nettopp innsikten om at bitmønsteret ikke bærer sin egen tolkning.

Den faste feilen er å slutte å lese etter det første alternativet som stemmer. Det gir deg halve poenget uten at du har krysset noe galt — se felle #8 i registeret.

Repetisjon — sitter begge tolkningene?

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.

Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Universitetet i Oslo. Dette er ikke offisielt studiemateriell. Les mer.