Skip to content
Merged
31 changes: 31 additions & 0 deletions course/en/07-unsigned-integers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Unsigned integers

An **unsigned** integer uses every bit to represent a non-negative magnitude.

## PREDICT

What is the largest value that fits in eight bits?

## STEP

With (n) bits there are (2^n) patterns, giving the unsigned range `0 ... 2^n - 1`.

Eight bits represent 0–255, 16 bits 0–65,535, and 32 bits 0–4,294,967,295.

`11111111₂ = FF₁₆ = 255₁₀` when interpreted as unsigned eight-bit data.

## Overflow and wraparound

Fixed-width arithmetic cannot represent every integer. Under modulo-(2^n) arithmetic, keeping only eight bits makes `255 + 1` wrap to 0.

## OBSERVE

The bits alone do not say “unsigned”. Their interpretation depends on the type and width supplied by context.

## EXPLAIN

Width and interpretation matter when reading registers, protocols, file formats and machine code.

## Check yourself

Find the range of a 12-bit unsigned integer and compute `250 + 10` with eight-bit wraparound.
27 changes: 27 additions & 0 deletions course/en/08-signed-integers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Signed integers

Negative integers require an agreed interpretation of bit patterns.

## PREDICT

Can `11111111₂` mean both 255 and −1?

## STEP

**Sign-magnitude** reserves a sign bit and therefore has both +0 and −0.

**Ones' complement** forms a negative value by inverting every bit and also has two zero encodings.

**Two's complement** is the standard modern integer representation. For (n) bits its range is `-2^(n-1) ... 2^(n-1)-1`. Eight bits therefore cover −128 through 127.

## OBSERVE

The same byte `FF₁₆` is 255 as unsigned eight-bit data and −1 as signed eight-bit two's complement.

## EXPLAIN

Meaning requires context: width, signedness and encoding rule. Raw bits do not carry those labels themselves.

## Check yourself

What is the signed 16-bit two's-complement range? Explain the asymmetry around zero.
33 changes: 33 additions & 0 deletions course/en/09-twos-complement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Two's complement in practice

Two's complement lets binary addition hardware operate naturally on positive and negative integers.

## PREDICT

How can `11111011₂` represent −5?

## STEP

To encode −5 in eight bits, write +5 as `00000101`, invert the bits to `11111010`, then add one to obtain `11111011` or `FB₁₆`.

For an (n)-bit pattern whose top bit is one, another interpretation method is unsigned-value minus (2^n): `251 - 256 = -5`.

## Addition

`00000101 + 11111011 = 1 00000000`. Discarding the carry beyond eight bits leaves zero.

## The minimum-value edge case

Negation is invert-plus-one, but signed eight-bit −128 has no representable +128 counterpart. Code must account for this boundary case.

## OBSERVE

Carry and signed overflow answer different questions, so CPUs may expose separate flags for them.

## EXPLAIN

Two's complement is naturally understood as modulo-(2^n) arithmetic plus a signed interpretation of the bit patterns.

## Check yourself

Encode −1, −42 and −128 as eight-bit hexadecimal. Interpret `80₁₆` as both unsigned and signed.
42 changes: 42 additions & 0 deletions course/no/07-unsigned-heltall.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Unsigned heltall

Et **unsigned** heltall bruker alle bitene til størrelsen på en ikke-negativ verdi.

## PREDICT

Hva er den største verdien som kan lagres i åtte bit?

## STEP

Med (n) bit finnes (2^n) mønstre. For unsigned heltall representerer de verdiene

`0 ... 2^n - 1`.

Dermed er områdene blant annet:

| Bredde | Område |
|---:|---:|
| 8 bit | 0–255 |
| 16 bit | 0–65 535 |
| 24 bit | 0–16 777 215 |
| 32 bit | 0–4 294 967 295 |

`11111111₂ = FF₁₆ = 255₁₀` som unsigned 8-bit-verdi.

## Overflow og wraparound

En fast bitbredde kan ikke representere vilkårlig store verdier. I modulo-(2^n)-aritmetikk vil en verdi som passerer maksimum gå rundt:

`255 + 1 = 0` for en 8-bit unsigned verdi dersom bare de nederste åtte bitene beholdes.

## OBSERVE

Bitmønsteret endrer ikke betydning av seg selv. `FF₁₆` er bare 255 dersom vi vet at mønsteret tolkes som unsigned.

## EXPLAIN

Datatypen og bitbredden er en del av betydningen. Dette er avgjørende når du leser registre, protokollfelt, filer eller maskinkode.

## Sjekk deg selv

Finn området for 12-bit unsigned og beregn hva `250 + 10` blir med 8-bit wraparound.
38 changes: 38 additions & 0 deletions course/no/08-signed-heltall.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Signed heltall

For å representere negative heltall må bitmønstrene få en avtalt signed-tolkning.

## PREDICT

Kan bitmønsteret `11111111₂` bety både 255 og −1?

## STEP

Historisk finnes flere representasjoner.

**Sign-magnitude** bruker én bit som fortegn og resten som størrelse. Det gir både +0 og −0.

**Énerkomplement** inverterer alle bit for å lage den negative verdien. Også dette gir to nullrepresentasjoner.

**Toerkomplement** er standardrepresentasjonen i moderne heltallsaritmetikk. For (n) bit er området

`-2^(n-1) ... 2^(n-1)-1`.

For åtte bit er området −128 til 127.

## OBSERVE

Samme rå byte kan tolkes forskjellig:

- `FF₁₆` = 255 som unsigned 8-bit
- `FF₁₆` = −1 som signed 8-bit toerkomplement

Ingen av tolkningene ligger «i» bitene alene.

## EXPLAIN

Representasjon krever kontekst: bitbredde, signedness og kodingsregel. Debuggere og disassemblere må derfor vite hvilken type de skal vise.

## Sjekk deg selv

Hva er området for signed 16-bit toerkomplement? Hvorfor er det én flere negativ verdi enn positive verdier?
45 changes: 45 additions & 0 deletions course/no/09-toerkomplement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Toerkomplement i praksis

Toerkomplement gjør at samme binære addisjonsmaskinvare kan brukes for positive og negative heltall.

## PREDICT

Hvordan kan `11111011₂` representere −5?

## STEP

For å finne representasjonen av −5 i åtte bit:

1. skriv +5: `00000101`
2. inverter bitene: `11111010`
3. legg til 1: `11111011`

Dermed er `FB₁₆` signed 8-bit −5.

En rask matematisk tolkning av et mønster med toppbit 1 er å ta den unsigned verdien og trekke fra (2^n):

`251 - 256 = -5`.

## Addisjon

`5 + (-5)`:

`00000101 + 11111011 = 1 00000000`

Carry utenfor åtte bit forkastes, og resultatet er null.

## Negering og minimumsverdien

Negering gjøres med invertering + 1. Men −128 i signed 8-bit har ingen positiv motpart som passer i samme type; +128 ligger utenfor området. Dette er en viktig edge case.

## OBSERVE

Carry og signed overflow er ikke det samme. CPU-er kan ha separate flagg fordi unsigned og signed tolkning stiller forskjellige spørsmål til samme bitresultat.

## EXPLAIN

Toerkomplement er best forstått som aritmetikk modulo (2^n), kombinert med en signed tolkning av halvparten av bitmønstrene.

## Sjekk deg selv

Representer −1, −42 og −128 som 8-bit hex. Tolk `80₁₆` både unsigned og signed.
9 changes: 9 additions & 0 deletions exercises/no/03-heltall.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Øvelser: heltallsrepresentasjon

1. Finn unsigned-området for 10 bit.
2. Tolk `FE₁₆` som unsigned 8-bit og signed 8-bit toerkomplement.
3. Skriv −42 som 8-bit toerkomplement i binær og hex.
4. Hva blir `250 + 20` dersom bare åtte bit beholdes?
5. Forklar forskjellen mellom carry og signed overflow.
6. Hvorfor kan signed 8-bit representere −128, men ikke +128?
7. Hva blir `7F₁₆ + 01₁₆` som signed 8-bit, og hvorfor er resultatet problematisk?
9 changes: 9 additions & 0 deletions solutions/no/03-heltall.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Løsninger: heltallsrepresentasjon

1. (2^{10}=1024) mønstre: 0–1023.
2. `FE₁₆` er 254 unsigned og −2 signed 8-bit toerkomplement.
3. +42 er `00101010₂`; inverter + 1 gir `11010110₂ = D6₁₆`.
4. 270 modulo 256 = 14.
5. Carry beskriver overflow i unsigned aritmetikk; signed overflow oppstår når det matematiske signed-resultatet ikke passer i signed-området.
6. Toerkomplement har området −128..127; null bruker ett mønster, og den negative halvdelen inkluderer minimumsverdien −128.
7. `7F + 01 = 80`. Bitmønsteret tolkes som −128 signed, mens det matematiske resultatet +128 ikke kan representeres: signed overflow.
Loading