MaA 11 Algoritmer och talteori

14. Talbaser

När vi normalt använder oss av tal tänker vi inte på att de är uppbyggda av potenser av 10. Vi tar och studerar talet 42.

Talet 42 kan vi skriva som \( 4 \cdot 10 + 2 = 4 \cdot 10^1 + 2 \cdot 10^0 \). Vi talar om att vi använder oss av talbasen 10.

Då vi mäter tid använder vi oss av att 1 timme består av 60 minuter, och 1 minut består av 60 sekunder. Här kan vi tala om att vi använder oss av talbasen 60. För att rådda till det mera så delar vi in sekunderna i tiondelar och hundradelar. Och dygnen delar vi in i 24 timmars enheter.

Inom elektroniken jobbar man med att strömmen är på eller av. Här använder man sig av ett binärt talsystem. Det består av 0 och 1.

För att veta vilken talbas man arbetar med betecknar man det med ett underindex. Talet \( 42_{10} \) betyder att vi jobbar med talet 42 i basen 10, medan \( 4_{42} \) betyder att vi jobbar i basen 42. \( 4_{42} = 4 \cdot 42^0 = 4_{10}\).

Exempel 1 Uttryck talet \( 42_{10} \) i det binära talsystemet.

Lösning

Det binära talsystemet består av 0 och 1. Dessa kombinerar vi så att tex \( 10_{2} = 1 \cdot 2^1 + 0 \cdot 2^0 = 2 \cdot 0 = 2_{10} \).

Vi gör följande tabell

BeteckningVärde i basen 10
0\( 0 \cdot 2^0 = 0 \)
1\( 1 \cdot 2^0 = 1 \)
10\( 1\cdot 2^1 + 0 \cdot 2^0 = 2 \)
11\( 1\cdot 2^1 + 1 \cdot 2^0 = 3 \)

Vi märker ganska snabbt att vi jobbar med \( 2^0=1, 2^1=2, 2^2=4, 2^3=8, 2^4=16, 2^5=32 \ldots \). För att komma vidare använder vi oss av dem.

Vi får

\( \begin{array}{rcl} 42_{10} & = & 1\cdot 32 + 0\cdot 16 + 1\cdot 8 + 0 \cdot 4 + 1 \cdot 2 + 0 \cdot 1 \\ & = & 1\cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0 \\ & = & 101010_{2} \\ \end{array} \)

Med större baser kan man utnyttja division. Då går man till väga på följande sätt.

Vi börjar med att dividera med \( 32 = 2^5 \), eftersom det är det största potensen av 2 som vi kan dividera med för att få ett heltal som kvot.

\( \begin{array}{rcll} 42 / 32 & = & 1 & \text{ rest } 10 \\ 16 & = & 0 \\ 10 / 8 & = & 1 & \text{ rest } 2 \\ 4 & = & 0 \\ 2 / 2 & = & 1 & \text{ rest } 0 \\ 1 & = & 0 \\ \end{array} \)

Då läser vi uppifrån nedåt, \( 101010_{2} \).

Alltså \( 42_{10} = 101010_{2} \).

Att dividera med multiplar av basen fungerar för vilken bas som hellst. Har man en lite svårare bas brukar man kunna räkna ut vilken annan bas som helst.

Exempel 2 Uttryck talet \( 100110001_{2} \) i basen 10.

Lösning

Då vi räknar något till vår normala 10 bas är det lättare.

Vi får

\( \begin{array}{rcl} 100110001_{2} & = & 1\cdot 2^8 +0\cdot 2^7 +0\cdot 2^6 +1\cdot 2^5 +1\cdot 2^4 +0\cdot 2^3 +0\cdot 2^2 + 0\cdot 2^1 + 1\cdot 2^0 \\ & = & 256 + 32 + 16 + 1 \\ & = & 305 \\ \end{array} \)

Alltså \( 100110001_{2} = 305_{10} \).

Exempel 3 Uttryck talet \( 34_{7} \) i basen 4.

Lösning

För enkelhetens skull går vi via basen 10.

\( \begin{array}{rcl} 34_{7} & = & 3\cdot 7^1 \cdot 4\cdot 7^0 \\ & = & 21 + 4 \\ & = & 25_{10} \\ \end{array} \)

För basen 4 gäller, \( 4^0 = 1, 4^1 = 4, 4^2 = 16, 4^3 = 64, \ldots \)

Vi får

\( \begin{array}{rcl} 25_{10} & = & 1 \cdot 16 + 2 \cdot 4 +1 \cdot 1 \\ & = & 1 \cdot 4^2 + 2 \cdot 4^1 + 1 \cdot 4^0 \\ & = & 121_{4} \\ \end{array}\)

Uppgifter

  1. Omvandla följande tal till basen 10.
    1. \( 11100_{2} \)

      Vi får

      \( \begin{array}{rcl} 11100_{2} & = & 1\cdot 2^4 + 1\cdot 2^3 + 1\cdot 2^2 + 0\cdot 2^1 + 0\cdot 2^0 \\ & = & 16 + 8 + 4 \\ & = & 28_{10} \\ \end{array} \)

    2. \( 1330_{4} \)

      Vi får

      \( \begin{array}{rcl} 1330_{4} & = & 1\cdot 4^3 + 3\cdot 4^2 + 3\cdot 4^1 + 0\cdot 4^0 \\ & = & 64 + 3\cdot 16 + 3 \cdot 4 \\ & = & 124_{10} \\ \end{array} \)

    3. \( 53_{5} \)

      Vi får

      \( \begin{array}{rcl} 53_{5} & = & 5\cdot 5^1 + 3\cdot 5^0 \\ & = & 5 \cdot 5 + 3\cdot 1 \\ & = & 28_{10} \\ \end{array} \)

  2. Skriv följande tal i basen 2.
    1. \( 124_{10} \)

      Vi får

      \( \begin{array}{rcll} 124_{10} / 64 & = & 1 & \text{ rest } 60 \\ 60 / 32 & = & 1 & \text{ rest } 28 \\ 28 / 16 & = & 1 & \text{ rest } 12 \\ 12 / 8 & = & 1 & \text{ rest } 4 \\ 4 / 4 & = & 1 & \text{ rest } 0 \\ / 2 & = & 0 \\ / 1 & = & 0 \\ \end{array} \)

      Alltså \( 124_{10} = 1111100_{2} \).

    2. \( 98_{10} \)

      Vi får

      \( \begin{array}{rcll} 98_{10} / 64 & = & 1 & \text{ rest } 34 \\ 34 / 32 & = & 1 & \text{ rest } 2 \\ / 16 & = & 0 \\ / 8 & = & 0 \\ / 4 & = & 0 \\ 2 / 2 & = & 1 & \text{ rest } 0 \\ / 1 & = & 0 \\ \end{array} \)

      Alltså \( 98_{10} = 1100010_{2} \).

    3. \( 56_{10} \)

      Vi får

      \( \begin{array}{rcll} 56_{10} / 32 & = & 1 & \text{ rest } 24 \\ 24 / 16 & = & 1 & \text{ rest } 8 \\ 8 / 8 & = & 1 & \text{ rest } 0 \\ / 4 & = & 0 & \\ / 2 & = & 0 \\ / 1 & = & 0 \\ \end{array} \)

      Alltså \( 56_{10} = 111000_{2} \).

  3. Uttryck följande tal i basen 16.

    Då vi jobbar med basen 16 kan vi få koefficienterna \( 0,1,2,\ldots 8,9,A,B,C,D,E,F \).

    1. \( 31415_{10} \)

      Talen som vi dividerar med är \( 16, 16^2 = 256, 16^3 = 4096, 16^4 = 65536, \ldots \)

      Vi får

      \( \begin{array}{rcll} 31415_{10} / 4096 & = & 7 & \text{ rest } 2743 \\ 2743 / 256 & = & 10 & \text{ rest } 183 \\ 183 / 16 & = & 11 & \text{ rest } 7 \\ 7 / 1 & = & 7 & \text{ rest } 0 \\ \end{array} \)

      10 motsvaras av A och 11 av B.

      Alltså \( 7 A B 7_{16} \).

    2. \( 27189_{10} \)

      Vi får

      \( \begin{array}{rcll} 27189_{10} / 4096 & = & 6 & \text{ rest } 2613 \\ 2613 / 256 & = & 10 & \text{ rest } 53 \\ 53 / 16 & = & 3 & \text{ rest } 5 \\ 5 / 1 & = & 5 & \text{ rest } 0 \\ \end{array} \)

      10 motsvaras av A.

      Alltså \( 6A35_{16} \).

    3. \( 2020_{10} \)

      Vi får

      \( \begin{array}{rcll} 2020 / 256 & = & 7 & \text{ rest } 228 \\ 228 / 16 & = & 14 & \text{ rest } 4 \\ 4 / 1 & = & 4 & \text{ rest } 0 \\ \end{array} \)

      14 motsvaras av E.

      Alltså \( 7E4_{16} \).

  4. Skriv talet \( 34_{4} \) i basen 3.

    Först skriver vi talet i basen 10.

    \( 34_{4} = 3\cdot 4^1 + 4\cdot 4^0 = 16_{10} \).

    Sedan får vi

    \( \begin{array}{rcll} 16_{10} / 3^2 & = & 1 & \text{ rest } 7 \\ 7 / 3^1 & = & 2 & \text{ rest } 1 \\ 1 / 3^0 & = & 1 & \text{ rest } 0 \\ \end{array} \)

    Alltså \( 34_{4} = 121_{3} \).

  5. Skriv talet \( 2020_{7} \) i basen 5.

    Först skriver vi talet i basen 10.

    \( 2020_{7} = 2\cdot 7^3 + 0\cdot 7^2 + 2\cdot 7^1 + 0\cdot 7^0 = 700_{10} \).

    Sedan får vi

    \( \begin{array}{rcll} 700_{10} / 5^4 & = & 1 & \text{ rest } 75 \\ / 5^3 & = & 0 \\ 75 / 5^2 & = & 3 & \text{ rest } 0 \\ / 5^1 & = & 0 \\ / 5^0 & = & 0 \\ \end{array} \)

    Alltså \( 2020_{7} = 10300_{5} \).

  6. Skriv talet \( CAFE_{16} \) i basen 2.

    Först skriver vi talet i basen 10.

    \( CAFE_{16} = 12\cdot 16^3 + 10\cdot 16^2 + 15\cdot 16^1 + 14\cdot 16^0 = 51966_{10} \).

    Sedan får vi

    \( \begin{array}{rcll} 51966_{10} / 2^{15} & = & 1 & \text{ rest } 19198 \\ 19198 / 2^{14} & = & 1 & \text{ rest } 2814 \\ / 2^{13} & = & 0 \\ / 2^{12} & = & 0 \\ 2814 / 2^{11} & = & 1 & \text{ rest } 766 \\ / 2^{10} & = & 0 \\ 766 / 2^{9} & = & 1 & \text{ rest } 254 \\ / 2^{8} & = & 0 \\ 254 / 2^{7} & = & 1 & \text{ rest } 126 \\ 126 / 2^{6} & = & 1 & \text{ rest } 62 \\ 62 / 2^{5} & = & 1 & \text{ rest } 30 \\ 30 / 2^{4} & = & 1 & \text{ rest } 14 \\ 14 / 2^{3} & = & 1 & \text{ rest } 6 \\ 6 / 2^{2} & = & 1 & \text{ rest } 2 \\ 2 / 2^{1} & = & 1 & \text{ rest } 0 \\ / 2^{0} & = & 0 & \\ \end{array} \)

    Alltså \( CAFE_{16} = 1100101011111110_{2} \).

  7. Framställ talet \( 110010_{2} \) i basen 4.

    Först skriver vi talet i basen 10.

    \( 110010_{2} = 1 \cdot 2^5 +1 \cdot 2^4 + 0 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0 = 50_{10} \).

    Sedan börjar vi dividera med \( 4, 16, 64, \ldots \)

    \( \begin{array}{rcll} 50_{10} / 16 & = & 3 & \text{ rest } 2 \\ / 4 & = & 0 \\ 2 / 2 & = & 1 & \text{ rest } 0 \\ / 1 & = & 0 \\ \end{array} \)

    Alltså \( 110010_{2} = 3010_4\).

  8. Skriv en algoritm över hur man ändrar från en talbas till en annan då man utnyttjar sig av division.

    Något i stil med följande.

    Förvandla först talet till basen 10, så att den sista siffran multiplicerar vi med basen upphöjt till 0, näst sista siffran multiplicerar vi med basen upphöjt till 1, osv.

    Sedan söker vi två exponenter, för den större gäller att då vi dividerar med talbasen upphöjt till ett tal får en kvot mindre än 0, och en kvot som är större än 1. Från dessa tal börjar vi dividera.

    Dividera talet i basen tio med talet som ger en kvot större än 1. Bestäm resten.

    Jämför resten med följande bas upphöjt till 1 mindre. Är resten mindre än basen upphöjt till ett mindre dividerar vi med basen. Annars går vi till följande bas upphöjt med två mindre.

    När vi kommer till att vi dividerar med basen upphöjt till 0, alltså 1, så slutar vi.

    Talet som vi kommit fram till läser vi "nerifrån" uppåt.

  9. Skriv ett program i Python där man kan konvertera från en talbas till en annan. Du kan börja med att skriva ett program där man kan konvertera från basen 10 till basen 2.

    För att koda i Python kan du använda dig av Replit om du inte har Python installerat på din dator.

    Utveckla programmet sedan så att man kan konvertera från basen 2 till basen 10.

    Gör som det sista steget att man väljer basen för talet som man har och sedan väljer man vilken bas som talet skall konverteras till.

    Lösningen