Alfabet En ändlig mängd (ofta betecknad Σ) av ”primitiva” symboler. Till exempel Strängar Bin = {0, 1} Dec = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Hex = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } Morse = {·, −} Σ = {aa, ab, ba, bb} 75 76 Strängar Språk Definition Låt Σ vara ett alfabet, och n ∈ N. Då är w ∈ Σn en sträng av längden n. Definition En delmängd L av Σ∗ kallas ett språk (över Σ). Exempel Binära strängar av längden två {00, 01, 10, 11} En sträng (a1 , a2 , . . . , an ) i Σn skrivs vanligen a1 a2 . . . an . Jämna decimala talen {0, 2, 4, 6, 8, 10, 12, . . .} Strängen () ∈ Σ0 skrivs ofta (eller λ). Obs att Σ∗ = i≥0 Σi . . . . . . och Σ+ = i≥1 Σi . [Språk = Language] [Sträng = String] 77 78 Sammansättning Likhet Definition Om w1 = a1 a2 . . . am och w2 = b1 b2 . . . bn är strängar så kallas strängen a1 a2 . . . am b1 b2 . . . bn för sammansättningen av w1 och w2 . (Skrivs ofta w1 .w2 eller helt enkelt w1 w2 .) Definition Två strängar a1 a2 . . . am och b1 b2 . . . bn är lika omm m = n och ai = bi för alla 0 ≤ i ≤ n. Observera att .w = w. = w w1 (w2 w3 ) = (w1 w2 )w3 [Sammansättning = Concatenation/Juxtaposition] 79 80 Monoid Induktiv definition Definition (Σ∗ , ., ) är ett exempel på en diskreta struktur som kallas en monoid. En monoid består av en mängd med en associativ operation Att ”vända på” en sträng = reverse(aw) = reverse(w).a reverse() w1 .(w2 .w3 ) = (w1 .w2 ).w3 och ett identitetselement (a ∈ Σ, w ∈ Σ∗ ) Exempel .w = w. = w. reverse(abc) = reverse(bc).a = = = = 81 (reverse(c).b).a ((reverse().c).b).a ((.c).b).a cba 82 Talsystem Induktiv definition II Strängar används t.ex. för att beteckna tal Längden på en sträng length() = 0 length(aw) = length(w) + 1 Exempel length(abc) = length(bc) + 1 = = = = (length(c) + 1) + 1 ((length() + 1) + 1) + 1 ((0 + 1) + 1) + 1 3 83 84 Decimaltal Binära tal Primitiver Primitiver Dec = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Bin = {0, 1} Sammansatta tal (i basen 10) Sammansatta tal (i basen 2) Tre - hundra - sex - tio - fem 3 · 100 + 6 · 10 + 5 · 1 2 3 · 10 + 6 · 101 + 5 · 100 (1101101)2 = 1 · 26 + 1 · 25 + 0 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 = 64 + 32 + 0 + 8 + 4 + 0 + 1 = (109)10 85 86 Hexadecimala tal Addition Primitiver 1 2 7 + 5 8 0 8 5 Hex = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } Sammansatta tal (i basen 16) 1 0 + 0 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1 0 1 0 1 (A40B3)16 = 10 · 164 + 4 · 163 + 0 · 162 + 11 · 161 + 3 · 160 = 655360 + 16384 + 0 + 176 + 3 = (671923)10 87 88 Omvandling Bin till Dec Heltalsdivision För varje heltal x och positivt tal y finns två unika heltal q och r som uppfyller att Induktiv/rekursiv definition bindec() = 0 bindec(w.b) = 2 · bindec(w) + b x = y · q + r och 0 ≤ r < y Till exempel Exempel bindec(1011) = = = = = = om x = 14 och y = 4 så 14 = 4 · 3 + 2 om x = 21 och y = 7 så 21 = 7 · 3 + 0 2 · bindec(101) + 1 2 · (2 · bindec(10) + 1) + 1 2 · (2 · (2 · bindec(1) + 0) + 1) + 1 2 · (2 · (2 · (2 · bindec() + 1) + 0) + 1) + 1 2 · (2 · (2 · (2 · 0 + 1) + 0) + 1) + 1 11 q kallas kvoten och är antalet gånger y delar x; r kallas resten och är det som blir över vid heltalsdivision. Resten brukar skrivas x mod y 89 90 Omvandling Dec till Bin Omvandling Dec till Bin Varje naturligt tal x0 kan skrivas som 121 60 30 15 7 3 1 x0 = 2 · x1 + r1 där r1 ∈ {0, 1} Talet x1 kan skrivas som x1 = 2 · x2 + r2 där r2 ∈ {0, 1} Dvs x0 = 2 · (2 · x2 + r2 ) + r1 där r1 , r2 ∈ {0, 1} = 2 · 60 + 1 = 2 · 30 + 0 = 2 · 15 + 0 = 2·7 + 1 = 2·3 + 1 = 2·1 + 1 = 2·0 + 1 (121)10 = (1111001)2 Eller ekvivalent x0 = 22 · x2 + 21 · r2 + 20 · r1 91 92 Tvåkomplementet Tvåkomplementet Med 8 bitar kan vi skilja på 28 = 256 olika tal; Med 8 bitar är tvåkomplementet av (−n)10 den binära representationen av (28 − n) = 256 − n. Hur hantera negativa tal? Använd 1 bit som ”tecken”. Representation av −128 ≤ n ≤ 127 Bättre lösning: använd tvåkomplementet för negtiva tal! om 0 ≤ n ≤ 127, tag binära representationen av n; om −128 ≤ n < 0, tag tvåkomplementet av n. −128 = 10000000 −127 = 10000001 .. . −1 93 = 11111111 0 1 = 00000000 = 00000001 .. . 127 = 01111111 94 Addition med tvåkomplementet Vi vill addera 113 och −73 (dvs. beräkna 113 − 73) 1 1 3 − 7 3 4 0 1 0 + 1 (1) 0 1 1 0 0 1 1 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 95