torsdag 22. mai 2014

Omregning mellom tallsystemer

Før man prøver å regne mellom tallsystemene, er det viktig at man vet litt om de. Les gjerne blogginnlegget mitt om tallsystemer, hvis du ikke er stø på dette fra før.

Veldig kort om tallsystemer

Det er fire tallsystemer jeg skal ta for meg her: Desimalt, Binært, Hexadesimalt og Oktalt.
Jeg låner tabellen fra blogginnleggt mitt om tallsystemer, der jeg skrev om blant annet notasjon.

DesimaltBinærtHexadesimaltOktalt
102168
Årsaken for at jeg drar inn notasjonstabellen, er at grunntallet brukes i omregninger. For å huske hvordan, må man nesten ha de tallene der i hodet. Desimaltall (titallsystemet) inneholder tegnene 0-9 (10 tall). Binært inneholde 1 eller 0 (2 tall), hexadesimalt inneholder 0-9 + A-F (10 + 6 = 16), oktalt inneholder 0-7 (8 tall).

Binært til desimal tall

Jeg går rett på regnestykket og forklarer etterpå:
11012 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1*2^0
11012 = 8 + 4 + 0 + 1
11012 = 1310

For å skjønne regnestykket, tar jeg den første linjen og fargelegger den:
11012 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1*2^0

Som man ser, vil der det er 0 i binære tall, legges inn 0 i regnestykket, i motsatt tilfelle 1.
De binære verdiene ganges med grunntallet 2^X, hvor potensen X synker i verdi mot tallet til høyre. Høyeste X-verdi er antall siffer -1 (4 siffer gir 3). 
  • Potensen til grunntallet er tilsvarende sifferposisjon sett fra høyre (starter med 0).
Hvis det er fire siffer, begynner det med ^3, deretter ^2, ^1 og så ^0.

Årsaken for at jeg poengterer dette, er at man har samme type omregning for heksadesimale til desimale tall, men grunntallet vil jo der være 16, ikke 2.

Omregning fra hexadesimalt tall til desimaltall

5016 = 5 * 16^1 + 0* 16^0
5016 = 80 + 0
5016 = 8010

Vi ser altså at grunntallet 16 nå tas inn i samme regnestykke, ved konvertering fra heksadesimalt til desimaltall. Ellers er det samme logikk, vi tar ett tall om gangen, først tallet 5, dette ganges med grunntallet opphøyd i sifferposisjon, sett fra høyre.


Omregning fra desimale til binære tall

Hvis vi vil finne 5010 på binær form, må vi huske at binære tall er totallsystemet.
Derfor tar vi heltallsdivisjon og samler på rest, helt til svaret blir = 0.

50 : 2 = 25, med rest lik 0
25 : 2 = 12, med rest lik 1
12 : 2 = 6, med rest lik 0
6 : 2 = 3, med rest lik 0
3 : 2 = 1, med rest lik 1
1 : 2 = 0, med rest lik 1

Svaret blir å lese rest oppover, som gir: 5010 = 110010

Omregning fra desimale til hexadesimale tall

Hvis vi vil finne 3510 på hexadesimal form, må vi huske at hexadesimale tall har 16 tegn.
Derfor tar vi heltallsdivisjon og samler på rest, helt til svaret blir = 0, lik forrige eksempel:

35 : 16 = 2, med rest lik 3
2 : 16 = 0, med rest lik 2

Svaret blir å lese rest oppover, som gir: 3510 = 2316 

Heksadesimal verdi av binært tall

Hvis man har et binært tall og man vil slå dette opp i tabell for omregning, skal man først dele opp det binære tallet i grupper à 4 bits. 

Eksempel: 11101101
Deles opp i: 11102    1101

Når det er gjort, kan man slå opp i tabellen:
DesimaltBinærtHexadesimaltOktalt
0000
1111
21022
31133
410044
510155
611066
711177
81000810
91001911
101010A12
111011B13
121100C14
131101D15
141110E16
151111F17
Her ser vi at:                  11102    11012
Har heksadesimal verdi: E16        D16 
Sett sammen gruppene: 111011012 = ED16 

Binær verdi av heksadesimal tall

Dette blir i stor grad det samme som forrige eksempel, men i motsatt retning.
La oss si at vi har den heksadesimale verdien: 9F16

Først deler vi opp:               916                F16
Slår opp binære verdier:     10012                   11112
Setter det sammen:   9F16 = 100111112

Var alt dette gresk? I så tilfelle anbefaler jeg å lese blogginnlegget mitt om sammenhengen og logikken bak tallsystemene.