Læringsmål

  • Kan forklare sammenhængen mellem binære tal og decimaler
  • Kan konvertere binær ↔ decimal uden indbyggede funktioner
  • Kan bruge loops og conditionals til matematiske problemer
  • Kan forklare, hvordan en IP-adresse er opbygget
  • Kan bygge en IP-omformer der konverterer begge veje mellem binær og decimal

Binære tal og IP-adresser

Computere tænker i binære tal — kun 0 og 1. Du har sikkert allerede noget kendskab til det binære talsystem og hvordan man omregner mellem binær og decimal. Her kombinerer du den viden med C#, loops og conditionals — og bygger en rigtig IP-omformer.

Binær og decimal — grundideen

I decimal tæller hvert ciffer en potens af 10 (enere, tiere, hundreder). I binær tæller hvert ciffer en potens af 2:

  Bit:       1    0    1    0
             ↓    ↓    ↓    ↓
  Potens:    8    4    2    1

  1·8 + 0·4 + 1·2 + 0·1  =  10 (decimal)

Hvert ciffer kaldes en bit. 8 bits = 1 byte. Tallet 255 i decimal er 11111111 i binær — alle 8 bits sat til 1.

Decimal Binær
0 0
1 1
2 10
5 101
10 1010
75 01001011
170 10101010
187 10111011
255 11111111

Potenser til en 8-bit oktet (husk rækkefølgen):

128  64  32  16  8  4  2  1

IP-adresser og oktetter

En IPv4-adresse består af fire tal (oktetter) adskilt af punktum — hver mellem 0 og 255:

192.168.1.1
 │    │ │ │
okt1 okt2...

Hver oktet er 8 bits. Eksempel:

192 = 11000000
168 = 10101000
  1 = 00000001
  1 = 00000001

IP-adresser identificerer enheder på et netværk. Private adresser (fx 192.168.x.x, 10.x.x.x) bruges internt. Public adresser er unikke på internettet.

Videoer

Se det i praksis

IP Addresses Explained | NetworkChuck

Projekt: Binær IP-omformer

I skal bygge en omformer, der tager en IP-adresse med 4 talgrupper — hver gruppe er et 8-cifret binært tal (oktet) — og kan konvertere begge veje:

Binær → decimal:

10111011.01001011.10101010.01010101  →  187.75.170.85

Decimal → binær:

187.75.170.85  →  10111011.01001011.10101010.01010101

Krav

  • Input skal være 4 grupper adskilt af punktum
  • Hver gruppe skal være præcis 8 bits (kun 0 og 1) i binær tilstand
  • Hver decimal-oktet skal være mellem 0 og 255
  • Programmet skal kunne konvertere begge veje
  • Designet er op til jer (konsol, menu, Blazor — se nedenfor)

I må ikke bruge indbyggede konverteringsfunktioner som Convert.ToString(n, 2), Convert.ToInt32(s, 2) eller tilsvarende. I skal bruge if/else, loops og den logik I har lært selv!

En mulig løsning kan bygges som en Blazor-baseret app med titlen Binær Kodeomformer — med inputfelter, validering og knap til at konvertere begge veje.

Binær → decimal med loop

Gå bit for bit fra venstre mod højre og akkumuler potenser af 2:

For en hel IP-adresse: split strengen ved ., valider at der er 4 dele, og kør metoden på hver oktet.

Decimal → binær med loop

Træk successivt de binære potenser fra tallet — samme princip som i pensum om løkker:

Validering med if/else og loops

En robust omformer skal validere input før konvertering:

// Split IP ved punktum
string[] parts = input.Split('.');

if (parts.Length != 4)
{
    Console.WriteLine("IP skal have præcis 4 dele!");
    return;
}

for (int i = 0; i < 4; i++)
{
    // Binær: præcis 8 tegn, kun 0 og 1
    if (parts[i].Length != 8)
    {
        Console.WriteLine("Hver oktet skal være 8 bits!");
        break;
    }

    for (int j = 0; j < 8; j++)
    {
        if (parts[i][j] != '0' && parts[i][j] != '1')
        {
            Console.WriteLine("Kun 0 og 1 er tilladt i binær oktet!");
            break;
        }
    }
}

For decimal input: brug int.TryParse og tjek number >= 0 && number <= 255 for hver oktet.

Programstruktur — skitse

Et godt udgangspunkt er en menu-løkke (while) der spørger brugeren:

  1. Binær → decimal
  2. Decimal → binær
  3. Afslut

Inde i hver gren: læs input → valider med loops og if/else → konverter oktet for oktet → udskriv resultat.

Git-trin

  • Branch: main
  • Commit: feat: ip-omformer binær decimal

Hjælp og øvelse

Er du usikker på omregning, så øv dig med disse ressourcer:

Dette emne kombinerer det du har lært: variabler, loops, conditionals, metoder og strings (Split, sammensætning) — anvendt på et rigtigt netværksproblem.

Binær i C# — bitvise operationer (bonus)

C# har operatorer til at arbejde direkte med bits — må ikke bruges som erstatning i projektet, men er nyttige at kende:

Opsummering

  • En IPv4-adresse har 4 oktetter à 8 bits (0–255 decimal)
  • Binær → decimal: læg potenser sammen hvor bit er 1
  • Decimal → binær: træk potenser fra (128, 64, 32 …) med loops
  • Projektet skal konvertere begge veje uden indbyggede konverteringsfunktioner
  • Brug nested loops og if/else til validering af input

Test din viden

Spørgsmål 1

Hvad er en oktet i en IPv4-adresse?

Spørgsmål 2

Hvad er decimalværdien af binær 1010?

Spørgsmål 3

Hvorfor må I ikke bruge Convert.ToString(n, 2) i IP-projektet?

Spørgsmål 4

Hvad skal hver binære gruppe i input have for IP-omformeren?

Spørgsmål 5

Hvordan konverterer OctetFromBinary fra binær til decimal?

Spørgsmål 6

Hvad er potens-rækkefølgen for en 8-bit oktet (fra venstre)?

Spørgsmål 7

Hvad skal validering tjekke for decimal input per oktet?