Så Här Konverterar Du Mellan Talbaser (Binärt, Oktalt och Hexadecimalt)
En talbas (radix) avgör hur många unika siffror ett positionsbaserat talsystem använder innan det bär över till nästa position. För att räkna om ett decimaltal till en annan bas för hand delar du upprepade gånger med målbasen och läser resterna baklänges, eller (för binärt) letar du upp de tvåpotenser som tillsammans bygger upp talet. Decimaltalet 202 blir till exempel 11001010 i binärt, 312 i oktalt och CA i hexadecimalt.
Vad en talbas egentligen är
Alla fyra talsystem, decimalt, binärt, oktalt och hexadecimalt, bygger på samma princip: positionsnotation. Varje siffras position i talet avgör dess vikt, och den vikten är en potens av basen. I decimaltalet 202 sitter siffran 2 längst till vänster på hundratalsplatsen, vilket betyder 2 × 10², medan 0 sitter på tiotalsplatsen (0 × 10¹) och 2 längst till höger på entalsplatsen (2 × 10⁰). Summan, 200 + 0 + 2, ger tillbaka 202.
Skillnaden mellan baserna ligger bara i hur många unika siffror varje position kan anta innan den bär över till nästa:
- Bas 10 (decimalt): siffrorna 0 till 9.
- Bas 2 (binärt): bara 0 och 1.
- Bas 8 (oktalt): siffrorna 0 till 7.
- Bas 16 (hexadecimalt): siffrorna 0 till 9, sedan bokstäverna A till F för värdena 10 till 15.
Ett tal som ser helt olika ut i två baser, som 202 i decimalt och CA i hexadecimalt, representerar exakt samma mängd. Det är bara skriftsättet som skiljer.
Att omvandla decimalt till binärt, oktalt och hexadecimalt för hand
Det finns två praktiska metoder, och det är värt att kunna båda eftersom de passar olika situationer. Vi tar decimaltalet 202 genom bägge.
Metod 1: division med rest. Dela talet med målbasen om och om igen, notera resten vid varje steg, och läs sedan resterna nerifrån och upp när du inte kan dela längre.
För oktalt (bas 8):
| Steg | Division | Kvot | Rest |
|---|---|---|---|
| 1 | 202 ÷ 8 | 25 | 2 |
| 2 | 25 ÷ 8 | 3 | 1 |
| 3 | 3 ÷ 8 | 0 | 3 |
Läs resterna underifrån och upp (3, 1, 2): 202 i decimalt blir 312 i oktalt.
För hexadecimalt (bas 16):
| Steg | Division | Kvot | Rest |
|---|---|---|---|
| 1 | 202 ÷ 16 | 12 | 10 (A) |
| 2 | 12 ÷ 16 | 0 | 12 (C) |
Läs resterna underifrån och upp (C, A): 202 i decimalt blir CA i hexadecimalt. Lägg märke till att resten 10 skrivs som bokstaven A och resten 12 som C, eftersom hexadecimalt inte har enskilda siffror för värden över 9.
Metod 2: platsvärde och subtraktion (bäst för binärt). Hitta den största tvåpotensen som får plats i talet, dra bort den, och upprepa med resten tills du når noll.
| Tvåpotens | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| Får plats i 202? | Ja | Ja | Nej | Nej | Ja | Nej | Ja | Nej |
| Bit | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 |
128 får plats (202 − 128 = 74). 64 får plats (74 − 64 = 10). 32 och 16 får inte plats i 10. 8 får plats (10 − 8 = 2). 4 får inte plats. 2 får plats (2 − 2 = 0). Klart, alla platser med “Ja” blir 1 och resten blir 0, vilket ger 11001010. Som kontroll: 128 + 64 + 8 + 2 = 202, precis de fyra positioner som fick en etta.
Samma tal, tre skriftsätt, ett värde: 202 (decimalt) = 11001010 (binärt) = 312 (oktalt) = CA (hexadecimalt).
Att läsa oktala och hexadecimala tal tillbaka till decimalt
Den motsatta riktningen, att gå från en annan bas tillbaka till decimalt, är ofta det du faktiskt behöver i vardagen. Ett bekant exempel för alla som arbetat med Linux eller macOS är filbehörigheten 755, som chmod-kommandot skriver i oktalt.
För att räkna ut vad 755 (oktalt) betyder i decimalt multiplicerar du varje siffra med sin platsvärde-potens av 8, från höger räknat med start på 8⁰:
7 × 8² + 5 × 8¹ + 5 × 8⁰ = 7 × 64 + 5 × 8 + 5 × 1 = 448 + 40 + 5 = 493
I binärt blir samma tal 111101101. Det enklaste sättet att komma dit är inte att räkna om via decimalt, utan att utnyttja att varje oktal siffra motsvarar exakt 3 binära bitar: 7 blir 111, 5 blir 101, och 5 blir 101 igen. Sätt dem i följd, 111 101 101, och du har svaret direkt utan mellansteg. I hexadecimalt blir talet 1ED.
Det där tricket, att gruppera bitar, går även åt andra hållet och fungerar lika bra för hexadecimalt, fast med 4 bitar per siffra (en “nibble”) i stället för 3. Det är precis därför hexadecimalt är så vanligt i programmering: 0xFF är bara två tecken, men motsvarar hela åtta binära siffror (11111111). En minnesadress eller en färgkod som #2F7BFF blir läsbar för ett mänskligt öga på ett sätt som den råa binära strängen aldrig blir, samtidigt som omvandlingen till och från binärt är trivial rakt av. Oktalt hade sin storhetstid när ordlängder i äldre datorer var jämnt delbara med 3 bitar, och lever kvar idag mest i just Unix-behörigheter av historiska skäl.
Prova med dina egna tal
Skriv in ett tal i valfritt fält nedan, decimalt, binärt, oktalt eller hexadecimalt, så räknas de andra tre om direkt medan du skriver.
Vanliga misstag och specialfall
Att blanda ihop teckenbelopp med tvåkomplement för negativa tal. Ta decimaltalet -18. I det här verktyget blir det -10010 i binärt, -22 i oktalt och -12 i hexadecimalt, alltså precis samma siffror som för 18 fast med ett minustecken framför. Det kallas teckenbelopp-representation (sign-magnitude), och det är inte samma sak som tvåkomplement, den representation som de flesta programmeringsspråk faktiskt använder internt för signerade heltal. Ett signerat 8-bitars tvåkomplement-tal för -18 skulle vara 11101110, ett helt annat bitmönster. Om du är van vid hur ditt programmeringsspråk lagrar negativa tal internt kan -10010 kännas fel vid första anblicken, men det är ett medvetet val: verktyget visar magnituden med ett minustecken i stället för att simulera en specifik bitbredd och overflow-beteende som varierar mellan språk och datatyper.
Att tro att versaler spelar roll i hexadecimalt. Du kan skriva både a-f och A-F när du matar in ett hexadecimalt värde, båda tolkas identiskt. Verktyget visar dock alltid utdata med versaler (CA, inte ca), vilket är den vanligaste konventionen i dokumentation och felmeddelanden.
Att lägga till inledande nollor och förvänta sig ett annat värde. 0312 i oktalt och 312 i oktalt är exakt samma tal, precis som 007 och 7 är samma sak i decimalt. Inledande nollor ändrar aldrig värdet, oavsett bas.
Att glömma bort precisionsgränsen för mycket stora tal. Verktyget hanterar heltal inom JavaScripts säkra heltalsintervall, ungefär upp till 2^53 − 1 (drygt 9 kvadriljoner). Långt under det du stöter på i vanlig kod eller vardaglig felsökning, men om du matar in astronomiskt stora tal börjar precisionen svikta, precis som i vilken JavaScript-baserad beräkning som helst.
Att skriva med prefix som 0x, 0b eller 0o. I de flesta programmeringsspråk skriver du hexadecimala literaler som 0xFF, binära som 0b1010 och oktala som 0o17, prefixet talar om för kompilatorn eller tolken vilken bas som avses. Det här verktygets fyra fält är redan bundna till en specifik bas var, så du skriver bara siffrorna själva (FF, inte 0xFF) i respektive fält. Ett bra sätt att pröva mönstret är ett runt tal som 4096 (2¹²): det blir 1000000000000 i binärt, 10000 i oktalt och 1000 i hexadecimalt, tre skriftsätt som alla råkar se prydligt runda ut just för att 4096 är en ren tvåpotens.
Vanliga frågor
Vad är egentligen en talbas eller radix? Det är antalet unika siffror ett positionsbaserat talsystem använder innan det bär över till nästa plats. Decimalt (bas 10) har tio siffror, 0 till 9. Binärt (bas 2) har bara två, 0 och 1. Oktalt (bas 8) har åtta, 0 till 7. Hexadecimalt (bas 16) har sexton, 0 till 9 plus A till F för de sex sista värdena.
Varför använder programmerare hexadecimalt i stället för att bara skriva binärt eller decimalt? Eftersom en hexadecimal siffra motsvarar exakt 4 binära bitar går det snabbt och felfritt att växla mellan de två för hand, samtidigt som talet blir betydligt kortare att skriva och läsa än sin binära motsvarighet. Det är därför minnesadresser, felkoder, bytevärden och färgkoder som #2F7BFF nästan alltid skrivs hexadecimalt i stället för binärt eller decimalt.
Hur räknar jag om binärt till decimalt för hand? Multiplicera varje bit med sin platsvärde-potens av 2, räknat från höger med start på 2⁰, och summera. För 11001010 (talet 202 från exemplet ovan): bitarna med värde 1 sitter på positionerna 128, 64, 8 och 2, och 128 + 64 + 8 + 2 = 202.
Vilket är det största talet den här omvandlaren klarar av? Den håller sig inom JavaScripts säkra heltalsintervall, ungefär upp till 2^53 − 1 (cirka 9 kvadriljoner). Utanför det intervallet krävs ett specialiserat bibliotek för stora heltal, men för i princip all vardaglig programmering, felsökning och skoluppgifter räcker gränsen med god marginal.
Stöder verktyget negativa tal? Ja. Sätt ett minustecken framför värdet i vilket som helst av de fyra fälten, så visas den negativa motsvarigheten i alla fyra baserna samtidigt, med teckenbelopp-representation snarare än tvåkomplement (se avsnittet om vanliga misstag ovan för skillnaden).
Kan jag dela verktyget med mina värden redan ifyllda? Ja. Webbadressen uppdateras automatiskt medan du skriver på den fullständiga verktygssidan, så du kan kopiera länken direkt från adressfältet eller använda Dela-knappen. Den som öppnar länken ser exakt samma värden du hade fyllt i.