Talsystem


Det finns många olika talsystem. Oändligt många skulle man kunna ha och det är ju väldigt många. Människan är förtjust i det decimala talsystemet med bas 10, av okänd anledning. Antagligen för att någon lustigkurre slumpade fram talet 10 och bestämde sig för att använda sig av ett talsystem med den basen. Datorer är inte alls förtjusta i det decimala talsystemet utan tycker mycket bättre om det binära talsystemet med bas 2. Människor som tycker om datorer gillar ofta de oktala och hexadecimala talsystemen med bas 8 respektive 16 eftersom det är lätt att konvertera mellan dem och det binära talsystemet. Personligen föredrar jag talsystem med bas 7.

Eftersom de flesta människorna är alltför vana vid det decimala talsystemet kan ju tal skrivna med andra baser än 10 se lite knepiga ut. De är egentligen inte så speciellt knepiga utan alla talsystem fungerar likadant. Det decimala talet 2173 kan skrivas som:
2*10^3+1*10^2+7*10^1+3*10^0
Om man tänker på alla andra talsystem på samma sätt blir livet enkelt.
t.ex. blir det binära talet 1101011011
1*2^9+1*2^8+0*2^7+1*2^6+0*2^5+1*2^4+1*2^3+0*2^2+1*2^1+1*2^0
vilket alltså motsvara det decimala talet 859.
På samma sätt ser man att det oktala talet 25 motsvarar det decimala talet 2*8^1+5*8^0=21.

Sådär kan man enkelt konvertera från vilket talsystem som helst till det decimala talsystemet. Att konvertera åt andra hållet kan dock bli lite mer knepigt. Ett sätt som åtminstone fungerar bra för ganska små tal är att bara fundera över vilka potenser av basen som bör adderas för att få det tal man vill ha. T.ex. för att skriva 23 med bas tio binärt vet vi att vi vill addera 16, 4, 2 och 1. Alltså motsvarar 23 med bas tio 10111 med bas två. Ett mer generellt sätt att göra det är att heltalsdividera det tal man vill konvertera med basen på det nya talet och titta vad resten blir och sen dividera vidare och använda resterna för varje division tills man inte kan dividera längre. Gör man det på talet 23 också så får man:
23/2=11 rest=1
11/2=5 rest=1
5/2=2 rest=1
2/2=1 rest=0
1/2=0 rest=1
Vilket ger samma resultat som förut. Alltså att 23 decimalt motsvarar 10111 binärt.

När man pysslar med digital elektronik kan man inte skriva positiva och negativa tal på samma sätt som vi vanligvis gör med ett minus-tecken framför. Därför används 2-komplement istället, vilket betyder att för att konvertera ett positivt tal till ett negativt eller vice versa inverteras talet och sedan adderas 1. Alltså ser man om talet är positivt eller negativt på den mest signifikanta biten (biten längst till vänster). Om den är noll är det ett positivt tal och annars ett negativt om den är ett.

Om ni har lust att läsa den här artikeln behöver ni bara lära er ASCII-kod nu, och det är inte så knepigt. ASCII är en 8-bitars binärkod där de decimala talen 0-9, alfabetet samt diverse andra tecken tilldelats varsitt tal mellan 0 och 127 som sedan skrivs som binärtal.