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.