Binære tal

Alle computere benytter internt binære tal. Men hvad er så binære tal? At noget er binært betyder at det har to tilstande. Binære tal har altså to cifre, nemlig nul og et {0,1}. Ellers bruger man det på samme måde som vores normale talsystem.

Fremover vil jeg adskille talsystemerne med (2) for binære tal og (10) for vores normale tal system. altså 10(2) er altså en værdi i det binære talsystem mens 10(10) er en værdi i vores normale talsystem.

Opbygningen af binære tal ligner meget vores normale talsystem 0(10) repræsenteres med 0(2), 1(10) repræsenteres med 1(2), 3(10) repræsenteres ikke af 3(2) for det findes jo ikke men af 10(2).

Det er altså som med vores normale talsystem, når der ikke er flere værdier tager man den næste position i brug. Men hedder den ikke 101? Nej, grundtallet følger talsystemet og ciffer positionerne hedder altså 22 21 20 , 2-1 o.s.v.

Forvirret? Lad os se på et eksempel. lad os tage tallet 10,11(2) og lægge tallet 1,111(2) til.

Også her skal vi sikre at decimal punktet er sat ens og der tilføjes et 0 til 10,11

[1]           [2]           [3]           [4]

                                                    (1)
        10,110        10,110        10,110        10,110
       + 1,111    -> + 1,111    -> + 1,111    -> + 1,111
       -------       -------       -------       -------
      resultat             1           101            01

Startopstillingen er vist under [1] med det tilføjet 0 til 10,11. Igen starter vi med det mindst betydende ciffer. [2] viser sammenlægningen af de to første cifre. 0 + 1 = 1, som skrives i resultatet. I [3] har vi det første problem. 1 + 1 = 10(2), husk 2 findes ikke i det binære talsystem. Men som i det normale talsystem skriver vi det mindst betydende ciffer i resultatet og flytter det mest betydende op som mente, som det er vist i [4].

[5]           [6]           [7]           [8]

          (1)         (1)                         (1)
        10,110        10,110        10,110        10,110
       + 1,111    -> + 1,111    -> + 1,111    -> + 1,111
       -------       -------       -------       -------
          1101           101          ,101        10,101

I [5] fortsætter vi beregning med 1 + 1 + menten 1 = 3. 3 findes ikke i det binære men er erstattet af 11 (1*21 + 1*20). Igen er vi ikke færdig men beholder mindst betydende ciffer i resultatet og flytter det mest betydende op som mente som vist i [6]. Bemærk at decimal punktet ikke har betydning her. I [7] flytter vi igen decimalpunktet ned og er klar til at fortsætte. [8b]er det samme igen 0 + 1 + menten 1 = 2. 2 finde ikke i det binære talsystem, så det er altså 0 + 1 + 1 = 10.

[9]           [10]

       (1)           (1)
        10,110        10,110
       + 1,111    -> + 1,111
       -------       -------
         0,101       100,101

I [9] kan vi igen ikke have et to cifret resultat så vi deler det i mindst betydende ciffer til resultatet og mest betydende til mente. [10] afslutter beregningen. Det nederste tal har ikke flere cifre og vi indsætter et 0 så regnestykket igen hedder 1 + 0 + menten 1 = 2. 2 skrives som 10 som vi skriver i resultat. Grunden til at vi direkte kan skrive det i resultatet er at der ikke er flere cifre at regne på. Vi får altså resultatet 100,101(2)

Metoden er altså den samme som ved vores normale talsystem. Forskellen er hvad hver position i tallet betyder. Hvor arabertallet stiger med *10 for hver plads til venstre for decimal punktet stiger det binære system med *2. Hvor vi normalt siger 1 -> 10 -> 100 siger det binære 1->2->4. Det samme gør sig gældende mod venstre. Arabertalsystemet siger 1/10 -> 1/100 -> 1/100 mens det binære talsystem siger 1/2 -> 1/4 -> 1/8

Konvertering mellem arabertal og binære tal

For at gøre tingene lettere vil jeg kun vise det for heltal. Inden for computerer er det alligevel typisk kun heltal man ser, med meget få undtagelser.

Fra arabertal til binært tal

Lad os tage tallet 4831(10) til at konverterer til det tilsvarende binære tal.

Metoden er ganske simpel. Tallet heltals divider det med det nye grundtal (2). Hvis der er en rest skrives 1 ellers skrives 0. Tag resultatet og gør det igen. fortsæt til resultatet er 0. Den første rest er mindst betydende ciffer i det binære tal og de efterfølgende kommer med stadig stigende betydning.

Hele det efterfølgende eksempel er i arabertal hvor ikke andet er vist:

4831 / 2 = 2415 rest = 1

2415 / 2 = 1207 rest = 1

1207 / 2 = 603 rest = 1

603 / 2 = 301 rest = 1

301 / 2 = 150 rest = 1

150 / 2 = 75 rest = 0

75 / 2 = 37 rest = 1

37 / 2 = 18 rest = 1

18 / 2 = 9 rest = 0

9 / 2 = 4 rest = 1

4 / 2 = 2 rest = 0

2 / 2 = 1 rest = 0

1 / 2 = 0 rest = 1

Vi kan nu udlæse det tilsvarende binære tal fra bunden mod toppen i rest tallene. Altså 1001011011111(2)

Typisk skrives det inden for IT verdenen med . (punktum) for hver 4 tegn fra højre mod venstre. Tallet vil altså typisk fremstå som 0001.0010.1101.1111(2) Vi vil under hexadecimale og oktale tal se hvorfor denne gruppering er specielt velegnet.

Fra binær tal til araber tal

For at komme fra det binære talsystem til araber tal systemet gør man følgende:

Tag det mest betydende ciffer gang det med 2. Læg det næste ciffer til og gang så resultate med 2. Forsæt med det indtil det sidste og mindst betydende ciffer. Dette lægge til men der ganges ikke med 2. nu har man resultatet i araber tal.

Lad os tage det binære tal vi lige kom frem til:

1001011011111(2)

2 * 1 = 2
(   2 + 0) * 2 = 4
(   4 + 0) * 2 = 8
(   8 + 1) * 2 = 18
(  18 + 0) * 2 = 36
(  36 + 1) * 2 = 74
(  74 + 1) * 2 = 150
( 150 + 0) * 2 = 300
( 300 + 1) * 2 = 602
( 602 + 1) * 2 = 1206
(1206 + 1) * 2 = 2414
(2414 + 1) * 2 = 4830
(4830 + 1)     = 4831

Resultatet er altså 4831(10)

Ok, nu kan vi altså komme fra arabertal til binære tal og tilbage. Det viser dog et “problem” med de binære tal. De får hurtigt mange cifre. Selv i de små eksempler her er vi oppe på 12 cifre for et 4 cifres arabisk tal. Det bliver altså hurtigt uoverskueligt for mennesker med de mange cifre. Løsningen på det er at indføre endnu 2 talsystemer, det oktale og det hexadecimale talsystem.

Nu sidder du sikkert og undrer dig over hvordan det skal gøre det mere overskueligt. Svaret er at begge disse talsystemer har nogle hurtige genveje fra de mange binærer cifre til et mindre antal oktale eller hexadecimale cifre og er dermed mere menneske venlige. sådanne genveje finde derimod ikke mellem det binære tal og arabertal. Det er også værd at bemærke at man i dag næsten udelukkende benytter hexadicimale tal.

2 tanker om “Binære tal

  1. Hvordan klarer en komputer tal efter decimalen og irrationelle tal. Det forkommer underligt, at ikke alle brøker kan skrives på en endelig binær form, men at man må vælge graden af nøjagtighed.

    • Grunden skal findes i at computere kun kan arbejde med heltal. Brøker og irrationelle tal begrænses af muligheden for at udtrykke dem som heltal på samme måde som nogle brøker begrænses når de udtrykkes som kommatal. 1/3 kan som bekendt kun skrives som en tilnærmet værdi 0.333… Det er samme form for begrænsning der findes i computere. Man skal her være opmærksom på at det ikke er de samme brøker som ikke kan udtrykkes som kommatal i 2-talssystemet som i 10-talssystemet.

      Hvordan Brøker og irrationelle tal faktisk repræsenteres i computere afhænger tildels også af det programmeringssprog der anvendes. Nogle sprog har en bedre repræsentation men er så langsommere til at lave beregninger da man så ikke kan anvende de hurtige funktioner som findes indbygget i computeren.

      Groft sagt så er computere ikke gode til andet end at flytte heltal og lægge dem sammen og trække dem fra hinanden. Så snart det bliver mere kompliceret så må man lade programmeringssprogene klare opgaven og så koster præcision beregningstid og langt de fleste ofre så præcision for hastighed. I moderned computere har man så indbygget nogle regnefunktioner som i nogen grad kan lave lidt mere komplicerede beregninger, men de har så deres begrænsninger.

      Når det kommer til matematik er computere overraskende uduelige. Computere kan ikke arbejde med matematikkens abstrakte kompleksitet. Den kompleksitet er bundet til programmeringssprog og mennesker må indbygge kompleksiteten på en måde så computeren kan arbejde med den som regning. Selv udtryk som C=A+B er uden for computerens evner og må omsættes til noget som den kan forstå. Det vil være for omfattende at gå i detaljer her da det vil kræve en gennemgang af computerens opbygning med processor, RAM, processor kode og meget mere.

      Jeg er bevist om at dette svar måske ikke er fyldestgørende, men problemet er at den moderned computer oplevelse er så langt fra ‘hjernen’ i computeren at svaret kræver en forklaring af flere lag af abstraktioner for at give fuld forståelse af kompleksiteten. Det kort svar er at cpu’en kun kan lægge (heltals) registre samme med positioner i hukommelsen men det er jo et ubrugeligt svar for dig. Jeg kan ikke engang give dig nogle henvisninger da jeg, til min overraskelse, ikke har fundet nogen der giver en forklaring.

      Jeg håber trods alt det har givet dig et fingerpeg om kompleksiteten i spørgsmålet og du er selvfølgelig velkommen til at spørge igen. Jeg skal gerne forsøge at uddybe svaret.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.