binær regneformer

advertisement
Fra desimal til binær
Eksempelet fra gruppetimen:
Verdi
57
28
14
7
3
1
0
0
Mente
1
0
0
1
1
1
0
0
Dermed har vi at 5710 = 0011 10012 (eventuelt 11 10012 hvis antall bit ikke er spesifisert).
Men hva er det egentlig som skjer? La oss se litt nærmere på tabellen:
Verdi
57 ÷ 2 = 28,5
28 ÷ 2 = 14
14 ÷ 2 = 7
7 ÷ 2 = 3,5
3 ÷ 2 = 1,5
1 ÷ 2 = 0,5
0
0
Vi halverer verdien vi har helt frem til vi får 0. Vi opererer kun med heltall, og runder alltid nedover.
Om vi halverer 57, sitter vi igjen med 28,5. Vi runder ned, og går videre ved å halvere 28. Den 0,5verdien vi fjernet, setter vi i mente. Det er disse menteverdiene som forteller oss hvordan tallet ser
ut ved binær representasjon:
Mente
1
0
0
1
1
1
0
0
Vi starter øverst, og plasserer tallene fra høyre, mot venstre, helt til vi har fylt inn hele det binære
tallet. 1 står øverst, og det flyttes dermed helt til høyre: _ _ _ _ _ _ _ 1. Det neste tallet er 0. Det
flyttes dermed til venstre for 1-tallet: _ _ _ _ _ _ 0 1. Vi fortsetter slik helt til vi har fylt ut alle tallene:
_____001
_____1001
___11001
_ _ 1 1 1 0 0 1 etc.
Vi trenger ikke egentlig å ha med de siste nullene. Du vil for eksempel ikke be om «0005 bananer» på
butikken, eller si at noe koster «00450» kroner. Det samme gjelder her, MED MINDRE det
spesifiseres at tallet skal være n-bit. I dette tilfelle, skal tallet være 8 bit, og vi må ha med de siste
nullene.
Finne det negative binære tallet fra det positive binære tallet
For å finne det negative binære tallet, har vi en enkel regel jeg skal demonstrere med et par
eksempler:
0011 1001 er den binære ekvivalensen av 57.
1100 0111 er den binære ekvivalensen av -57.
0110 00110 er den binære ekvivalensen av 198.
1001 11010 er den binære ekvivalensen av -198.
0011 1000 er den binære ekvivalensen av 56.
1100 1000 er den binære ekvivalensen av -56.
Som alltid starter vi fra høyre og går mot venstre. Vi skriver den negative verdien rett under den
positive, for å gjøre sammenlikningen enklere. Vi ser at de alle starter veldig likt. De er faktisk
identiske, til og med vi møter på den første 1-eren. Etter at vi møter på den første 1-eren, «snur» vi
tallene. Det vil si, der den positive verdien har et 1-tall, vil den negative verdien ha et 0-tall, og vice
versa.
OBS: Negative verdier har alltid et 1-tall helt til venstre! For eksempel vil tallet 255 bli representert
ved 11111111 på desimal form. -255 vil bli representert ved 100000001. Vi beholder det første 1tallet vi støter på, før vi snur alle tallene. Det siste tallet på den binære formen av 255 ender med et
1-tall, og vi ser oss dermed nødt til å utvide tallet med en ekstra bit, for å få plass til et 1-tall på
slutten, som viser oss at tallet er negativt.
Fra binær til desimal
Det er betraktelig mye enklere å finne det desimale tallet fra et binært tall. For å gjøre jobben så
enkel som mulig, kan man bruke følgende mal: 256 – 128 – 64 – 32 – 16 – 8 – 4 – 2 – 1.
Det jeg mener med dette, er at du kan plotte det binære tallet direkte under disse tallene. For
eksempel, du har fått i oppgave om å finne den desimale ekvivalensen til det binære tallet
101010100. Da kan du gjøre følgende:
256 128
1
0
64
1
32
0
16
1
8
0
4
1
2
0
1
0
Herfra er jobben veldig grei. Vi ser at sifferet 1 har blitt plassert under enkelte tall. For eksempel kom
«tilfeldigvis» sifferet 1 under 256, 64, 16 og 4. Sifferet 0 kom under 128, 32, 8, 2 og 1. Vi ignorerer
alle tallene som kom over 0, og adderer alle tallene som kom over 1. Da får vi følgende regnestykke:
256 + 64 + 16 + 4 = 340. Den desimale ekvivalensen til det binære tallet 101010100 er 340.
Man er forresten ikke begrenset til 9 bit. Det vil alltid være 2n og ut til det uendelige, så om du har
fått et binærtall med 10 bit, legger du bare til en seksjon med 512 til venstre for 256.
Finne det negative desimale tallet fra det binære tallet
Som tidligere nevnt, hvis sifferet i et binært tall helt til venstre er et 1-tall, er det en sjanse for at det
desimale tallet er negativt. Måten å finne det negative desimale tallet fra et binært tall, er veldig
grei. For eksempel, du har blitt spurt om å finne det negative desimale tallet fra 10011110. Du vet at
det er negativt, ettersom det har blitt spesifisert. Da gjør vi det samme som vi gjorde ista:
128
1
64
0
32
0
16
1
8
1
4
1
2
1
1
0
Igjen ignorerer vi tallene som kom over 0. Da står vi igjen med 128, 16, 8, 4 og 2. Det vi gjør denne
gangen, er at vi starter med den negative verdien av det høyeste tallet, altså 128, før vi adderer
resten. Regnestykket vil dermed se slik ut: -128 + 16 + 8 + 4 + 2 = 98.
Grunnen til at dette funker, er at omså man adderer alle de resterende tallene, altså 64, 32, 16, 8, 4,
2 og 1, vil man bare sitte igjen med 127. Dermed vil denne metoden aldri gi oss et positivt tall.
Dermed gir det også mer mening hvorfor vi legger til et ekstra tall til venstre i eksemplet vi nevnte på
første side: «255 er 11111111 på desimal form. -255 er 100000001 på desimal form».
256 128
0
1
64
1
32
1
16
1
8
1
4
1
2
1
1
1
2
0
1
1
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
256 128
1
0
64
0
32
0
16
0
8
0
4
0
-256 + 1 = -255
Fra binær til hex og vice versa
Hex-tabellen består av de 15 ulike kombinasjoner med 0 og 1: De 15 ulike kombinasjonene man kan
skape ved hjelp av 4 bit og 0- og 1-verdier.
0 = 0000
3 = 0011
6 = 0110
9 = 1001
C = 1100
1 = 0001
4 = 0100
7 = 0111
A = 1010
D = 1101
2 = 0010
5 = 0101
8 = 1000
B = 1011
E = 1110
F = 1111
Om vi har tallet 1101 0010 1101 0101 0101 i binær form, kan det være greit å forkorte det litt. La oss
se om vi finner verdiene i tabellen…… Selvfølgelig finner vi verdiene i tabellen. Da er det bare å se
hva som matcher:
0 = 0000
3 = 0011
6 = 0110
9 = 1001
C = 1100
1 = 0001
4 = 0100
7 = 0111
A = 1010
D = 1101
2 = 0010
5 = 0101
8 = 1000
B = 1011
E = 1110
F = 1111
Voilla! Vi kan dermed, veldig enkelt, representere 1101 0010 1101 0101 0101 med hex slik: D2D55.
Er du ute etter å konvertere fra hex til binær, bare bruk tabellen og reverser prosessen.
Download