Talsystem Positionssystem. Ända sedan romarrikets fall har positionssystemet använts för att beskriva tal. Man har en begränsad mängd siffror vars värde dels beror på vilken siffra det är, dels vilken position i talet det har. Exempel på positionssystem: Det decimala talsystemet med tio siffror (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Exempel på talsystem som inte är ett positionssystem: Det romerska talsystemet (I, V, X, L, C, D, M, ...). Talsystem Positionssystemet gör det enkelt att utföra aritmetik som addition och subtraktion på tal. Siffrorna på varje position adderas för sig och bara om summan blir större än värdet på siffran med högst värde påverkar det närmast högre sifferposition. 1 Exempel: 1234 + 18 1252 Det decimala talsystemet Det oktala talsystemet Tio siffror: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Basen 10 En siffra som står till vänster om en annan har ett värde som är tio gånger mer. Exempel: 2228 = 2 82 + 2 81 + 2 80 = 14610 Exempel: 222 = 2 100 + 2 10 + 2 = 2 102 + 2 101 + 2 100 Enkelt med aritmetik Exempel: 1 1234 + 18 1252 Vanliga talsystem Talsystem Bas Siffror Decimala 10 Oktala 8 Binära 2 Hexadecimala 16 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7 0,1 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Åtta siffror: 0, 1, 2, 3, 4, 5, 6, 7 Basen 8 En siffra som står till vänster om en annan har ett värde som är åtta gånger mer. Enkelt med aritmetik Exempel: 1 12348 + 158 12518 Det binära talsystemet Två siffror: 0, 1 Basen 2 En siffra som står till vänster om en annan har ett värde som är två gånger mer. Exempel: 1012 = 1 22 + 0 21 + 1 20 = 510 Enkelt med aritmetik Exempel: 111 10102 + 1112 100012 1 Det binära talsystemet De tjugo första heltalen i decimal och binär representation. Decimalt 0 1 2 3 4 5 6 7 8 9 Binärt 0 1 10 11 100 101 110 111 1000 1001 Decimalt 10 11 12 13 14 15 16 17 18 19 Binärt 1010 1011 1100 1101 1110 1111 10000 10001 10010 10011 1102 = 1 22 + 1 21 + 0 20 = 1 4 + 1 2 = 610 101012 = 1 24 + 0 23 + 1 22 + 0 21 + 1 20 = 1 16 + 1 4 + 1 = 2110 11112 = 1 23 + 1 22 + 1 21 + 1 20 = 8 + 4 + 2 + 1 = 1510 111102 = 1 24 + 1 23 + 1 22 + 1 21 = 16 + 8 + 4 + 2 = 3010 1111002 = 1 25 + 1 24 + 1 23 + 1 22 = 32 + 16 + 8 + 4 = 6010 7 binärt tal Exempel: D7B16 = 13 16 + 7 16 + 11 16 = 345110 1 0 Enkelt med aritmetik Exempel: + 123416 1816 124C16 Omvandling mellan talsystem Det är alltså enkelt att ta reda på det decimala värdet av ett givet tal i ett annat talsystem. Men hur gör man för att göra det omvända: föra över ett decimalt tal i ett annat talsystem. Exempel: 2228 = 2 82 + 2 81 + 2 80 = 14610 Men hur gör vi för att göra det omvända: 14610 = 2228 ? Ledning: 2228 = 2 82 + 2 81 + 2 80 = (2 8 + 2) 8 + 2 = 14610 5 4 3 2 1 bitposition 0 1 0 0 1 1 1 1 1 256 64 32 16 8 4 2 1 vikter Det hexadecimala talsystemet 16 ”siffror”: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Basen 16 En siffra som står till vänster om en annan har ett värde som är 16 gånger mer. 2 6 100111112 = 25610 + 1610 + 810 + 410 + 210 + 110 = 28710 Det hexadecimala talsystemet Det binära talsystemet Fler exempel: Decimalt Binärt Hexadeci malt 0 1 2 3 4 5 6 7 0000 0001 0010 0011 0100 0101 0110 0111 0 1 2 3 4 5 6 7 Decimalt Binärt 8 9 10 11 12 13 14 15 Hexadeci malt 1000 1001 1010 1011 1100 1101 1110 1111 8 9 A B C D E F Omvandling mellan talsystem Divisionsalgoritmen: För varje par av positiva heltal tal och bas finns två unika heltal q (kvoten) och r (resten) sådana att tal = q bas + r och 0 ≤ r ≤ bas - 1 Divisionsalgoritmen beskriver det man brukar kalla för heltalsdivision: q = tal/bas (heltalsdivision) r = tal mod bas = tal - q bas Exempel: 14610 = (2 8 + 2) 8 + 2 tal q bas r 2 Omvandling mellan talsystem Hur omvandlar man ett decimalt tal till ett annat talsystem? Jo, genom att tillämpa divisionsalgoritmen om och om igen. Exempel: Omvandla 14610 till basen 8. Omvandling mellan talsystem Exempel: Omvandla 2110 till basen 2. tal q = tal/bas r = tal – q·bas 21 21/2 = 10 21 - 10·2 = 1 10/2 = 5 10 - 5·2 = 0 q = tal/bas r = tal – q·bas 10 146 146/8 = 18 146 - 18·8 = 2 5 5/2 = 2 5 - 2·2 = 1 18 - 2·8 = 2 2 2/2 = 1 2 - 1·2 = 0 2 - 0·8 = 2 1 1/2 = 0 1 - 0·2 = 1 tal 18 2 18/8 = 2 2/8 = 0 Svaret syns i sista kolumnen. Läs nerifrån och upp! 2228 Svaret syns i sista kolumnen. Läs nerifrån och upp! 101012 Omvandling mellan talsystem Exempel: Omvandla 345110 till basen 16. Omvandling mellan talsystem tal q = tal/bas r = tal – q·bas 3451 3451/16 = 215 3451 - 215·16 = 1110 = B 215 215/16 = 13 215 -13·16 = 7 13 13/16 = 0 13 - 0·16 = 1310 = D Svaret syns i sista kolumnen. Läs nerifrån och upp! D7B16 Ur tabellen får vi också att 21510 = D716. Omvandling mellan talsystem Hur omvandlar man ett tal från ett godtyckligt talsystem till ett annat? bas1 bas2 10 Svar: Omvandla först till det decimala talsystemet. Låt oss göra en funktion som omvandlar ett decimaltal tal till ett annat talsystem med basen bas. Kalla funktionen convert(tal, bas). Funktionen ska returnera en sträng med det omvandlade talet. Som vi sett tidigare kan funktionen definieras rekursivt: convert(tal, bas) = ”” , om tal = 0 {convert( tal, bas) = convert(q, bas) + r , om tal ≠ 0 där, som tidigare, q = tal/bas och r = tal - q bas. Då r ≥ 10 får man tänka på att ersätta r med lämplig symbol. Omvandling mellan talsystem Om bägge baserna är tvåpotenser går det snabbare att först omvandla till basen 2. bas1=2n1 bas2=2n2 2 3