Att kunna omvandla mellan olika talsystem med papper och penna är bra att kunna. Men ibland behöver vi bara ett svar – snabbt. Det här kan programmet bc hjälpa dig med. Programmet bc finns i de flesta Unixliknande system, så som Linux, FreeBSD, macOS med flera. Förkortningen bc står för Basic Calculator men benämns även Bench Calculator.

Som en vanlig miniräknare

När vi först startar bc kan vi använda det som en vanlig miniräknare, exempelvis:

$> bc
8*8
64
3^5
243
a=4
b=2
a+b
6

Avsluta bc med kommandot quit.

Tänk på vi måste starta bc med flaggan -l ifall vi ska kunna använda decimaler.

$> bc -l
5.8*3.3
19.14
quit

Omvandla mellan olika talsystem

Vi kan ställa in både in-talsystemet och ut-talsystemet i bc. Som standard används det vanliga decimala talsystemet med basen 10. För att omvandla talet 15 till hexadecimalt behöver vi därför bara ändra ut-talsystemet i bc. Detta gör vi med obase. Här sätter vi obase till 16 (hexadecimalt) men låter ibase (in-talsystemet) vara orört. Därefter anger vi talet 15 till bc och får svaret F.

$> bc
obase=16
15
F

Om vi istället vill omvandla från binärt till hexadecimalt ändrar vi även ibase. Här sätter vi ibase till 2 (binärt) och låter obase vara 16 (hexadecimalt) från det föregående exemplet. Vi omvandlar sedan det binära talet 111 till hexadecimalt.

ibase=2
111
7

OBS: Om vi nu försöker ändra ibase eller obase kommer dessa att tolkas som binära tal eftersom vi har ibase satt till 2. För att återställa ibase är det enklaste att avsluta bc med quit och börja om igen. För att slippa avsluta bc och starta det igen kan vi istället använda bc direkt från kommandoraden. Vi anger då obase, ibase och talet med hjälp av echo, och omdirigerar det sedan till bc.

För att omvandla det binära talet 110100100 till oktalt (basen 8) kan vi skriva följande kommando direkt i skalet (kom ihåg att sätta obase före ibase):

$> echo "obase=8; ibase=2; 110100100" | bc
644

För att istället omvandla det hexadecimala talet FF till decimalt (basen 10) gör vi på följande sätt:

$> echo "ibase=16; FF" | bc
255

Ett sista exempel, där vi omvandlar det oktala talet 644 till hexadecimalt:

$> echo "obase=16; ibase=8; 644" | bc
1A4