From 78236fb5ca580707d181ff3caead54682ee4350f Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:19 +0200 Subject: [PATCH 01/10] M1: add core number systems course material --- course/no/04-oktal.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 course/no/04-oktal.md diff --git a/course/no/04-oktal.md b/course/no/04-oktal.md new file mode 100644 index 0000000..7c92d44 --- /dev/null +++ b/course/no/04-oktal.md @@ -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? From d23b6d28eee1ff09675e3c7eff1c731526c3fd0e Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:21 +0200 Subject: [PATCH 02/10] M1: add core number systems course material --- course/no/05-konvertering.md | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 course/no/05-konvertering.md diff --git a/course/no/05-konvertering.md b/course/no/05-konvertering.md new file mode 100644 index 0000000..a675999 --- /dev/null +++ b/course/no/05-konvertering.md @@ -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. From 50e7638a7f786d648653d8657bc03f7d60c49336 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:24 +0200 Subject: [PATCH 03/10] M1: add core number systems course material --- course/no/06-toerpotenser.md | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 course/no/06-toerpotenser.md diff --git a/course/no/06-toerpotenser.md b/course/no/06-toerpotenser.md new file mode 100644 index 0000000..74ba31f --- /dev/null +++ b/course/no/06-toerpotenser.md @@ -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? From 7a4d901821e79d758ff79f1d2bf6198c65d089db Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:26 +0200 Subject: [PATCH 04/10] M1: add core number systems course material --- course/en/02-binary.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 course/en/02-binary.md diff --git a/course/en/02-binary.md b/course/en/02-binary.md new file mode 100644 index 0000000..a69043d --- /dev/null +++ b/course/en/02-binary.md @@ -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. From ce82cf52a8545878fa431b749e3cdf1b49505076 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:29 +0200 Subject: [PATCH 05/10] M1: add core number systems course material --- course/en/03-hexadecimal.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 course/en/03-hexadecimal.md diff --git a/course/en/03-hexadecimal.md b/course/en/03-hexadecimal.md new file mode 100644 index 0000000..7d9b3ef --- /dev/null +++ b/course/en/03-hexadecimal.md @@ -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. From 30635568310dc05ca2e424c8b46138da5b5ec524 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:31 +0200 Subject: [PATCH 06/10] M1: add core number systems course material --- course/en/04-octal.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 course/en/04-octal.md diff --git a/course/en/04-octal.md b/course/en/04-octal.md new file mode 100644 index 0000000..b9ae56b --- /dev/null +++ b/course/en/04-octal.md @@ -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. From d1eb5bbccba45abbdcd6bd97002a6818f3eaa903 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:33 +0200 Subject: [PATCH 07/10] M1: add core number systems course material --- course/en/05-conversion.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 course/en/05-conversion.md diff --git a/course/en/05-conversion.md b/course/en/05-conversion.md new file mode 100644 index 0000000..f26cd6b --- /dev/null +++ b/course/en/05-conversion.md @@ -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. From c515c39484b6d92f6095ec72bd3b600e7b1ed55c Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:35 +0200 Subject: [PATCH 08/10] M1: add core number systems course material --- course/en/06-powers-of-two.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 course/en/06-powers-of-two.md diff --git a/course/en/06-powers-of-two.md b/course/en/06-powers-of-two.md new file mode 100644 index 0000000..a34477c --- /dev/null +++ b/course/en/06-powers-of-two.md @@ -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? From 7696601964045eed17587602303a0796b92c1b28 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:37 +0200 Subject: [PATCH 09/10] M1: add core number systems course material --- exercises/no/02-kjernesystemer.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 exercises/no/02-kjernesystemer.md diff --git a/exercises/no/02-kjernesystemer.md b/exercises/no/02-kjernesystemer.md new file mode 100644 index 0000000..c2dffbf --- /dev/null +++ b/exercises/no/02-kjernesystemer.md @@ -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. From 663750072c75da70fe395582c66d030754926922 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:14:40 +0200 Subject: [PATCH 10/10] M1: add core number systems course material --- solutions/no/02-kjernesystemer.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 solutions/no/02-kjernesystemer.md diff --git a/solutions/no/02-kjernesystemer.md b/solutions/no/02-kjernesystemer.md new file mode 100644 index 0000000..d857009 --- /dev/null +++ b/solutions/no/02-kjernesystemer.md @@ -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.