Skip to content
25 changes: 25 additions & 0 deletions course/en/02-binary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Binary: base 2

Binary uses only 0 and 1. Each position has a power-of-two weight.

## PREDICT

What decimal value does `10110₂` represent?

## STEP

From right to left the weights are 1, 2, 4, 8, 16 and so on. Thus `10110₂ = 16 + 4 + 2 = 22₁₀`.

A binary digit is a **bit**. Eight bits are commonly grouped into a byte. Wider machine values are often described as words or by an explicit bit width.

## OBSERVE

With (n) bits there are (2^n) possible patterns. Four bits give 16 patterns; eight bits give 256.

## EXPLAIN

Binary is useful because digital hardware can reliably distinguish two states. The representation maps naturally to switches, logic levels, registers and memory.

## Check yourself

Convert `1111₂` and `10000000₂` to decimal.
29 changes: 29 additions & 0 deletions course/en/03-hexadecimal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Hexadecimal: base 16

Hexadecimal uses 0–9 and A–F. One hexadecimal digit corresponds exactly to four binary bits.

## PREDICT

What binary pattern is represented by `A5₁₆`?

## STEP

`A = 10`, `B = 11`, through `F = 15`. Therefore `A5₁₆ = 10×16 + 5 = 165₁₀`.

Using four-bit groups:

`A5₁₆ = 1010 0101₂`.

Programming languages commonly use the `0xA5` notation. Assemblers and debuggers may also use forms such as `$A5` or an `h` suffix.

## OBSERVE

Two hex digits represent one byte. This makes hex especially convenient for memory dumps, addresses, machine code and bit masks.

## EXPLAIN

Hex is compact binary notation. Learning the 16 four-bit patterns removes much of the friction from low-level computing.

## Check yourself

Convert `FF₁₆` to binary and decimal.
25 changes: 25 additions & 0 deletions course/en/04-octal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Octal: base 8

Octal uses digits 0–7. Each octal digit corresponds exactly to three binary bits.

## PREDICT

Translate `111 101 010₂` one three-bit group at a time.

## STEP

Base-8 positions have weights (8^0, 8^1, 8^2,dots). For example, `572₈ = 378₁₀`, and `101 111 010₂ = 572₈`.

Octal remains visible in Unix-style permission notation such as `755`, where each digit summarizes three permission bits.

## OBSERVE

Three bits represent values 0–7, exactly the digit range of octal.

## EXPLAIN

Octal does not change the number, only its representation. Its computing value comes from its direct three-bit grouping.

## Check yourself

Convert `111111₂` to octal and `17₈` to binary.
31 changes: 31 additions & 0 deletions course/en/05-conversion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Converting between bases

Conversion changes representation while preserving value.

## PREDICT

Are `1010₂`, `12₈`, `10₁₀` and `A₁₆` different numbers?

## STEP

To convert to decimal, sum each digit times its positional weight: `2D₁₆ = 2×16 + 13 = 45₁₀`.

To convert a decimal integer to another base, repeatedly divide by the target base and read the remainders in reverse.

Binary provides a convenient bridge. Group four bits for hexadecimal and three bits for octal:

`0010 1101₂ = 2D₁₆`

`101 101₂ = 55₈`

## OBSERVE

The value remains unchanged throughout. Only the symbols and positional weights differ.

## EXPLAIN

Conversion becomes much faster once common binary, octal and hexadecimal patterns are recognized directly.

## Check yourself

Convert `42₁₀` to binary and hex, and `FF₁₆` to decimal.
27 changes: 27 additions & 0 deletions course/en/06-powers-of-two.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Powers of two

Computing repeatedly uses quantities of the form (2^n).

## PREDICT

How many distinct values can eight bits represent?

## STEP

Useful landmarks include (2^4=16), (2^8=256), (2^{10}=1024), (2^{16}=65536), (2^{20}=1048576), and (2^{32}=4294967296).

With (n) bits there are (2^n) bit patterns. Eight bits therefore provide 256 patterns, representing 0 through 255 when interpreted as unsigned.

`1 KiB = 1024 bytes`; the SI quantity `1 kB = 1000 bytes`. MiB and GiB are corresponding binary prefixes.

## OBSERVE

One hexadecimal digit is four bits, two hexadecimal digits are one byte, and four hexadecimal digits span 16 bits.

## EXPLAIN

Powers of two connect bit width, ranges, memory sizes and address spaces.

## Check yourself

How many patterns fit in 16 bits, and what is the largest unsigned 8-bit value?
35 changes: 35 additions & 0 deletions course/no/04-oktal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Oktal: base 8

Oktal bruker sifrene 0–7. Hver oktalsiffer representerer nøyaktig tre binære bit, og derfor er oktal en praktisk kompakt skrivemåte for binære verdier.

## PREDICT

Hva tror du binært `111 101 010` blir i oktal? Prøv å oversette hver gruppe på tre bit før du leser videre.

## STEP

Posisjonene i base 8 har vektene (8^0, 8^1, 8^2,dots).

Eksempel:

`572₈ = 5×8² + 7×8¹ + 2×8⁰ = 378₁₀`.

Binært kan samme verdi grupperes tre og tre bit:

`101 111 010₂ = 572₈`.

## OBSERVE

Tre bit kan uttrykke verdiene 0–7. Derfor passer én gruppe på tre bit perfekt i ett oktalsiffer.

Oktal dukker fortsatt opp i Unix-lignende systemer. Filmodusen `755` består av tre grupper med rettighetsbit: eier, gruppe og andre.

## EXPLAIN

Oktal er ikke et annet slags tall. Det er en annen representasjon av samme verdi. Fordelen i databehandling er den direkte koblingen mellom ett oktalsiffer og tre bit.

## Sjekk deg selv

1. Skriv `111111₂` i oktal.
2. Skriv `17₈` i binær.
3. Hvorfor er sifret 8 ugyldig i et oktalt tall?
40 changes: 40 additions & 0 deletions course/no/05-konvertering.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Konvertering mellom tallsystemer

Å konvertere betyr å endre representasjon uten å endre verdien.

## PREDICT

Er `1010₂`, `12₈`, `10₁₀` og `A₁₆` fire forskjellige tall?

## STEP

Fra en vilkårlig base til desimal summerer vi sifferverdi ganger posisjonsvekt:

`2D₁₆ = 2×16 + 13 = 45₁₀`.

Fra desimal til en annen base kan vi bruke gjentatt heltallsdivisjon og lese restene baklengs.

For 45 til binær:

- 45 / 2 gir rest 1
- 22 / 2 gir rest 0
- 11 / 2 gir rest 1
- 5 / 2 gir rest 1
- 2 / 2 gir rest 0
- 1 / 2 gir rest 1

Dermed `45₁₀ = 101101₂`.

Mellom binær og hex grupperer vi fire bit: `0010 1101₂ = 2D₁₆`. Mellom binær og oktal grupperer vi tre bit: `101 101₂ = 55₈`.

## OBSERVE

Binær fungerer som en nyttig bro mellom oktal og hex fordi gruppestørrelsene er faste.

## EXPLAIN

Metodene er mekaniske, men målet er å kjenne igjen mønstre. Etter hvert bør `1111₂ = F₁₆ = 15₁₀` være like naturlig som enkel hoderegning.

## Sjekk deg selv

Konverter `42₁₀` til binær og hex, `FF₁₆` til desimal, og `377₈` til binær.
44 changes: 44 additions & 0 deletions course/no/06-toerpotenser.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Potenser av to

Datamaskiner er fulle av størrelser som følger (2^n). Å kjenne de vanligste toerpotensene gjør adresser, bitmasker og kapasiteter mye enklere å lese.

## PREDICT

Hvor mange forskjellige verdier kan åtte bit representere?

## STEP

Start med:

| n | 2^n |
|---:|---:|
| 0 | 1 |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
| 8 | 256 |
| 10 | 1024 |
| 16 | 65536 |
| 20 | 1048576 |
| 32 | 4294967296 |

Med (n) bit finnes (2^n) mulige bitmønstre. Åtte bit gir derfor 256 mønstre, fra 0 til 255 når de tolkes som unsigned.

## KiB og kB

`1 KiB = 1024 bytes`, mens SI-prefikset `1 kB = 1000 bytes`. Tilsvarende er MiB og GiB binære prefikser.

## OBSERVE

Hex passer også naturlig: ett hexsiffer er fire bit, to hexsifre er én byte, og fire hexsifre dekker 16 bit.

## EXPLAIN

Toerpotenser knytter sammen bitbredde, verdiområde, minnestørrelse og adresserom. Dette blir et gjennomgående verktøy resten av kurset.

## Sjekk deg selv

1. Hvor mange mønstre finnes med 16 bit?
2. Hva er største unsigned 8-bit-verdi?
3. Hva er forskjellen mellom 1 MiB og 1 MB?
10 changes: 10 additions & 0 deletions exercises/no/02-kjernesystemer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Øvelser: kjernesystemene

1. Konverter `11010110₂` til hex og desimal.
2. Konverter `7B₁₆` til binær og desimal.
3. Konverter `345₈` til binær og desimal.
4. Skriv 100₁₀ i binær, oktal og hex.
5. Hvor mange verdier finnes i 12 bit?
6. Hva er største unsigned-verdi i 12 bit?
7. Forklar hvorfor ett hexsiffer tilsvarer fire bit.
8. Forklar forskjellen mellom 4 KiB og 4 kB.
10 changes: 10 additions & 0 deletions solutions/no/02-kjernesystemer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Løsninger: kjernesystemene

1. `11010110₂ = D6₁₆ = 214₁₀`.
2. `7B₁₆ = 01111011₂ = 123₁₀`.
3. `345₈ = 011 100 101₂ = 229₁₀`.
4. `100₁₀ = 1100100₂ = 144₈ = 64₁₆`.
5. (2^{12}=4096) mulige verdier.
6. (2^{12}-1=4095).
7. Fire bit har (2^4=16) mønstre, nøyaktig antallet sifre i base 16.
8. 4 KiB er 4096 bytes; 4 kB er 4000 bytes.
Loading