Viser innlegg med etiketten tallsystemer. Vis alle innlegg
Viser innlegg med etiketten tallsystemer. Vis alle innlegg

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.

Sammenhengen og logikken bak tallsystemer

For mange vil binære tall se helt merkelig og uforståelig ut, men det er egentlig ikke så vanskelig å skjønne.

Titallsystemet

Vi er alle vant med desimale tall (titalls-systemet). Når du går i butikken og kjøper noe, er prisen gjerne 999. Dette er et tall i titall-systemet. Tallsystemet er såpass innarbeidet, at man vet at 10 kommer etter 9.

Man kan egentlig tenke på det at ved å dele opp verdien du har, i hvert tegn:
999 => [9][9][9], så vet du at du ikke har plass til flere tegn, uten å utvide.
Derfor vet du at 999 følges av: 1000.

Det binære tallsystemet

Binært er av eller på, 1 eller 0. Det er litt som lysbryteren din, enten er lyset av eller på (nå ser vi bort i fra dere som har dimmer, he he). Men når det er sagt, er ellers virkemåten litt på samme måte som i titall-systemet.

På lik måte med titallsystemet, begynner det binære tallsystemet med 0.
Hva er det neste? Jo, det blir 1.

Som nevnt, er binære tall 0 eller 1, hva følger da 1?
På samme måte som i titallsystemet, har vi ikke plass til mer, hvis du har bare 1-ere.
Derfor blir neste verdi: 10

Når verdien er 10, har vi mer plass og neste blir: 11.
Igjen er det ikke plass, 11 blir til 100, som følges av 101 og 110, deretter 111 og så 1000.

Dette fortsetter slik nedover.

Det heksadesimale tallsystemet

Nå blir det kanskje litt vel "gresk", mange har ikke hørt om heksadesimale tallsystemet en gang. Det blir litt ny logikk å tenke på her. I motsetning til det desimale tallsystemet, vil det heksadesimale tallsystemet ha verdier mellom: 0-9, A-F.

Hvordan virker dette i praksis? Det virker kanskje veldig vanskelig, men egentlig ikke.
Vi begynner på 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Men hva er neste? Det er ikke 10, det er: A, fulgt av B, C, D, E, F.
Når F er nådd (husk det var 0-9, A-F), følges det av: 10, 11, 12, ... 18, 19.
Neste verdi blir da 1A, 1B, 1C, 1D, 1E, 1F.

Som vi husker, 0-9, A-F. Derfor er neste etter 1F = 20, 21, 22, 23... (opp til 29), etterfulgt av 2A, 2B..

Det oktale tallsystem

Oktale tallsystemet har et grunntall 8. En enkel måte å huske det på, er å tenke på oktagon (åttekant), eller engelsk Octapus (blekksprut, med 8 armer).

Hvis man bare ser på tallrekken, blir man kanskje forvirret. Men hvis vi tenker på samme måte: Vi begynner på 0: 0,1,2,3,4,5,6,7

Neste tall blir: 10 (vi har jo bare tallene 0-7, som er åtte tall).

Tallene i system

For å omregne mellom tallsystemene, kan vi sette de i en tabell:
Desimalt Binært Hexadesimalt Oktalt
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 8 10
9 1001 9 11
10 1010 A 12
11 1011 B 13
12 1100 C 14
13 1101 D 15
14 1110 E 16
15 1111 F 17

Notasjoner

Ved konvertering mellom tallsystemer, er det viktig å bruke notasjoner. Dette er på grunn av at for eksempel 11 i desimaltall ikke er det samme som 11 i det binære tallsystemet.

Notasjoner skrives gjerne som et lite tall, til høyre for verdien.
Her er notasjonene for de fire tallsystemene jeg har skrevet om:

Desimalt Binært Hexadesimalt Oktalt
10 2 16 8
Det er egentlig lett å huske. Desimaltall (titallsystemet) har notasjonen 10, binære tallsystemet har 2, heksadesimalt har 16 (0-9 er 10 tegn + A-F er 6 tegn = 16). Oktalt er som vi husker åtte.

Hvis vi skal vise den binære verdien til desimaltallet 11, kan vi gjøre det slik:
1110 = 10112

Mønster i binære tall

Jeg fant et mønster i det binære tallet, som jeg synes var litt morsomt.
Hvis man deler opp verdiene tegn for tegn, vil man se at det er et spesifikt mønster som repeterer nedover, avhengig av hvilket tegn man ser på. Dette kan man i teorien bruke til kontrollsjekk (er det riktige verdier nedover?).

Jeg har her splittet det opp, for å vise mønsteret (dette gjør jeg ikke for å forklare noe altså, bare for å vise mønsteret jeg så):
Binært Kol1 Kol2 Kol3 Kol4
0


0
1


1
10

1 0
11

1 1
100
1 0 0
101
1 0 1
110
1 1 0
111
1 1 1
1000 1 0 0 0
1001 1 0 0 1
1010 1 0 1 0
1011 1 0 1 1
1100 1 1 0 0
1101 1 1 0 1
1110 1 1 1 0
1111 1 1 1 1

I kolonne 4 ser vi jo fort at det er annenhver 0, 1. Derimot har kolonne 3 to par (1,1, 0,0, 1,1, 0,0).
Kolonne 2 har fire samlet: (1,1,1,1,0,0,0,0,1,1,1,1), mot kolonne 1 som har 8 samlet (1,1,1,1,1,1,1,1).
Hadde jeg fortsatt ned til desimaltall 32, ville mønsteret blitt i kolonne 1: (1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0) (osv.).