Utviklere

Slik Konverterer Du Tallsystemer (Binær, Oktal og Heksadesimal)

8 min lesetid

For å konvertere et tall mellom tallsystemer bygger du det opp på nytt i den nye basen, siffer for siffer, ved hjelp av divisjon med rest eller ved å summere potenser av basen. Desimaltallet 202 blir 11001010 i binær, 312 i oktal og CA i heksadesimal, og samme logikk fungerer uansett hvilken vei du regner.

Hva et tallsystem faktisk er

Et tallsystem, eller en base (radix), bestemmer hvor mange unike sifre en posisjonell tallrekke bruker før den bærer over til neste siffer. Det vanlige titallsystemet (base 10) bruker sifrene 0 til 9. Binær (base 2) bruker bare 0 og 1. Oktal (base 8) bruker 0 til 7. Heksadesimal (base 16) trenger seks ekstra symboler utover 0 til 9, og løser det ved å bruke bokstavene A til F for verdiene 10 til 15.

Det som gjør systemene sammenlignbare er posisjonsverdi. I desimaltallet 202 betyr sifferet lengst til venstre 2 × 10², midtsifferet 0 × 10¹, og sifferet lengst til høyre 2 × 10⁰. Bytt ut 10 med en annen base, og prinsippet er identisk: hver posisjon representerer en potens av basen, og verdien av tallet er summen av sifferet ganger sin posisjons potens. Det er hele mekanikken bak enhver konvertering mellom tallsystemer, resten er bare bokføring.

Konvertere desimal til binær, oktal og heksadesimal for hånd

Ta desimaltallet 202 og bygg det om til de tre andre basene med to forskjellige teknikker.

Divisjon-med-rest-metoden går ut på å dele gjentatte ganger på målbasen og notere resten, for så å lese restene nedenfra og opp. For oktal (base 8):

StegDivisjonKvotientRest
1202 ÷ 8252
225 ÷ 831
33 ÷ 803

Lest nedenfra og opp gir restene 3, 1, 2, altså 312 i oktal.

Samme fremgangsmåte for heksadesimal (base 16), der en rest på 10 eller mer skrives som bokstav:

StegDivisjonKvotientRest
1202 ÷ 161210 (A)
212 ÷ 16012 (C)

Lest nedenfra og opp gir det CA i heksadesimal.

Plassverdi-metoden fungerer godt for binær og går motsatt vei: finn den største toerpotensen som er mindre enn eller lik tallet, trekk den fra, og gjenta med resten. For 202:

ToerpotensVerdiPasser i 202?Rest etter trekk
2⁷128Ja202 − 128 = 74
2⁶64Ja74 − 64 = 10
2⁵32Nei10
2⁴16Nei10
8Ja10 − 8 = 2
4Nei2
2Ja2 − 2 = 0
2⁰1Nei0

Bitene som ble satt til 1 (128, 64, 8, 2) gir binærtallet 11001010. Kontrollregningen bekrefter det: 128 + 64 + 8 + 2 = 202.

Så desimal 202 blir 11001010 i binær, 312 i oktal og CA i heksadesimal, med tre uavhengige regnemåter som alle lander på samme svar.

Et rundt tall som en toerpotens viser samme poeng enda tydeligere. Desimal 4096 (som er 2¹²) blir 1000000000000 i binær, 10000 i oktal og 1000 i heksadesimal. Alle tre skrivemåtene ser “runde” ut, fordi 4096 er en ren potens av 2, og både 8 og 16 selv er potenser av 2.

Å lese oktal og heksadesimal tilbake til desimal

Konverteringen går like greit den andre veien: multipliser hvert siffer med sin posisjons potens av basen, og legg sammen. Et kjent eksempel fra Unix-verdenen er filrettighetsverdien 755, den du ser i en chmod 755-kommando.

Tolket som oktal betyr 755:

7 × 8² + 5 × 8¹ + 5 × 8⁰ = 7 × 64 + 5 × 8 + 5 × 1 = 448 + 40 + 5 = 493

Så oktal 755 tilsvarer desimal 493. I binær blir det samme tallet 111101101, og her finnes en snarvei som er verdt å kjenne til: hvert oktalsiffer tilsvarer nøyaktig 3 binærbiter, siden 8 er 2³. Splitt 755 i enkeltsifre (7, 5, 5) og oversett hvert av dem separat til 3 biter: 7 blir 111, 5 blir 101, og 5 blir 101 igjen. Sett dem sammen: 111 101 101, som er nøyaktig 111101101. I heksadesimal blir det samme tallet 1ED, og der gjelder samme triks med 4 biter per siffer i stedet for 3, siden 16 er 2⁴.

Denne bit-grupperingen er ikke bare et regnetriks. Den er grunnen til at oktal og heksadesimal i det hele tatt finnes som notasjoner: de er kompakte, lesbare stedfortredere for binærtall. Et enkelt heksadesimalsiffer dekker nøyaktig én nibble (4 bit), så to heksadesimalsifre dekker en hel byte, det er derfor fargekoder som #RRGGBB, minneadresser og byteverdier nesten alltid skrives i hex fremfor rå binærtall. Oktal hadde tilsvarende rolle historisk på datamaskiner med ordlengder delelige på 3, og henger fortsatt igjen i chmod-notasjon i dag.

Prøv med dine egne tall

Skriv inn et tall i hvilket som helst av feltene under, binær, oktal, desimal eller heksadesimal, og de tre andre oppdateres automatisk.

Tallsystem-konvertering
Gratis, ingen registrering, fungerer på alle enheter.
Åpne hele verktøyet

Vanlige feil og spesialtilfeller

Å forvente to-komplement for negative tall. Verktøyet over bruker fortegn-og-størrelse-representasjon (sign-magnitude), ikke to-komplement. Desimal -18 blir -10010 i binær, -22 i oktal og -12 i heksadesimal, altså rett og slett et minustegn foran den vanlige omregningen av 18. Mange programmerere er vant til to-komplement fra lavnivåspråk, der -18 som signert 8-bits binærtall i stedet blir 11101110, et helt annet bitmønster. Ingen av de to representasjonene er “feil”, de løser bare forskjellige problemer: sign-magnitude er intuitivt å lese for mennesker, to-komplement er det maskinvare faktisk bruker internt for å gjøre subtraksjon om til addisjon.

Å blande bokstavstørrelse i heksadesimal-input. Både små og store bokstaver (a til f, eller A til F) godtas når du skriver inn et heksadesimaltall, men verktøyet viser alltid resultatet med store bokstaver. Det er ren visningskonvensjon og påvirker ikke verdien.

Å tro at ledende nuller endrer verdien. 00202 er samme tall som 202, uansett hvilken base du står i. Ledende nuller er noen ganger brukt for å utfylle en fast bitbredde (for eksempel en byte skrevet som 00000101), men de bidrar ikke til den matematiske verdien.

Å forveksle programmeringsspråkenes prefikser med selve tallet. I de fleste programmeringsspråk skriver du binære, oktale og heksadesimale literaler med et prefiks, som 0b11001010, 0o312 eller 0xCA. Dette verktøyet forventer bare rene sifre uten prefiks, altså 11001010, 312 eller CA. Legger du ved prefikset ved en feiltakelse, blir resultatet feil eller avvist.

Å regne med for store tall. Verktøyet håndterer heltall innenfor JavaScripts sikre heltallsgrense, omtrent opp til 2⁵³ − 1, som er rundt 9 kvadrilliarder. Godt nok til nesten enhver praktisk bruk, men presisjonen kan svikte for ekstremt store tall utover det.

Ofte stilte spørsmål

Hva er egentlig en base eller radix? En base er antall unike sifre et tallsystem bruker før det bærer over til neste posisjon. Desimal har base 10 (sifrene 0 til 9), binær har base 2 (0 og 1), oktal har base 8 (0 til 7), og heksadesimal har base 16 (0 til 9 pluss A til F). Verdien av et tall er summen av hvert siffer ganger basen opphøyd i sifferets posisjon, talt fra 0 fra høyre.

Hvorfor bruker programmerere heksadesimal i stedet for ren binær? Fordi hvert heksadesimalsiffer tilsvarer nøyaktig 4 binærbiter (en nibble), blir hex mye mer kompakt å lese og skrive enn lange rekker med 0-er og 1-ere. 0xFF er to tegn, mens den binære tilsvarigheten, 11111111, er åtte. Det er derfor minneadresser, fargekoder og feilkoder nesten alltid vises i hex.

Hvordan konverterer jeg et binærtall til desimal for hånd? Multipliser hvert binærsiffer med den toerpotensen posisjonen tilsvarer, og legg sammen produktene. For 11001010, talt fra høyre med posisjon 0, gir det bitene satt ved posisjon 1, 3, 6 og 7: 2¹ + 2³ + 2⁶ + 2⁷ = 2 + 8 + 64 + 128 = 202.

Hva er det største tallet verktøyet kan konvertere? Praktisk sett heltall opp til rundt 2⁵³ − 1 (cirka 9 kvadrilliarder), som er JavaScripts grense for eksakt heltallsregning. Over den grensen kan avrundingsfeil oppstå.

Støtter verktøyet negative tall? Ja. Sett et minustegn foran tallet i hvilket som helst av de fire feltene, så regner verktøyet om den negative verdien i de tre andre basene med samme fortegn-og-størrelse-format, altså ikke to-komplement. Se avsnittet om vanlige feil over for detaljer.

Kan jeg dele et resultat med noen via lenke? Ja, verktøyet skriver de utfylte verdiene til URL-en mens du taster, så du kan kopiere adressefeltet og sende det videre. Mottakeren ser da nøyaktig de samme fire tallene forhåndsutfylt når de åpner lenken.

BinærHeksadesimalTallsystemerProgrammering
Tallsystem-konvertering
Prøv det nå selv med hele verktøyet.
Prøv nå