Grundlagen der
Informatik (VO)
�Kodierung und Bits & Bytes
Christopher Pollin
Institut für Digitale Geisteswissenschaften,�https://digital-humanities.uni-graz.at
Kodierung am Beispiel: "Hallo"
Ausgangswort: Hallo
ASCII-Zeichenkodierung: �H = 72, a = 97, l = 108, l = 108, o = 111
Binäre Zahlenkodierung: �H: 72 → 01001000 �a: 97 → 01100001 �l: 108 → 01101100 �l: 108 → 01101100 �o: 111 → 01101111
Resultat: 01001000 01100001 01101100 01101100 01101111
Prozess: Zeichen → ASCII-Zahl → Binärzahl
Zahlensysteme: Binär - Dezimal - Hexadezimal
Zahl ist ein abstraktes mathematisches Konzept zur Darstellung, Quantifizierung und Zählung von Mengen; sie existiert unabhängig von ihrer Darstellung und hat eine Bedeutung (Semantik).
Ziffer ist ein einzelnes Symbol zur Darstellung von Zahlen in einem bestimmten Zahlensystem und dient als syntaktisches Element der Zahlendarstellung.
Alphabet10 = {0,1,2,3,4,5,6,7,8,9}
Alphabet2 = {0,1}
Alphabet16 = {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}�
Stellenwertsysteme: Dezimal und Binär
Binärdarstellung
263
101
100er | 10er | 1er |
2 | 6 | 3 |
2*102 | 6*101 | 3*100 |
4er | 2er | 1er |
1 | 0 | 1 |
Eine Binärzahl
128er | 64er | 32er | 16er | 8er | 4er | 2er | 1er |
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 |
1
1
1
1
1
1
0
0
128
32
16
4
2
1
0
0
+
+
+
+
+
+
+
= 183
1*27 + 0*26 + 1*25 + 1*24 + 0*23 + 1*22 + 1*21 + 1*20
Zahlensysteme: Binär - Dezimal - Hexadezimal
Alphabet10 = {0,1,2,3,4,5,6,7,8,9}� 31610 = 3 * 102 + 1 * 101 + 6 * 100� 300 + 10 + 6
Alphabet2 = {0,1}� 10102 = 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 � 8 + 0 + 2 + 0��Alphabet16 = {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}� 4A16 = 4 *161 + 10 * 160� 64 + 10
Hands-On: Binär zu Dezimal Umrechnung
Rechne folgende binäre Zahl in das Dezimalsystem um: 01001010
Hinweise:
Hands-On: Binär zu Dezimal Umrechnung (Lösung)
Jede Stelle der Zahl hat den Wert der entsprechenden 2er-Potenz. �Nimm jede Ziffer mal der entsprechenden Potenz und summiere.
Gehe am besten von rechts nach links vor:
�
01001010
0*27 + 1*26 + 0*25 + 0*24 + 1*23 + 0*22 + 1*21 + 0*20�0 + 64 + 0 + 0 + 8 + 0 + 2 + 0 = 74�
256 = 28�128 = 27�64 = 26�32 = 25�16 = 24�8 = 23�4 = 22�2 = 21�1 = 20
Hands-On: Binär zu Dezimal Umrechnung (LLM Lösung)�11010101
Dezimal nach Binär
� 74 : 2 0 R� 37 : 2 1 R
18 : 2 0 R
9 : 2 1 R� 4 : 2 0 R� 2 : 2 0 R
1 : 2 1 R���
01001010
Hands-On: Dezimal nach Binär
Versuche nun, die Dezimalzahl 57 in eine Binärzahl umzuwandeln:
Hands-On: Dezimal nach Binär (Lösung)
57 ÷ 2 = 28 Rest 1
28 ÷ 2 = 14 Rest 0
14 ÷ 2 = 7 Rest 0
7 ÷ 2 = 3 Rest 1
3 ÷ 2 = 1 Rest 1
1 ÷ 2 = 0 Rest 1
Jetzt lesen wir die Reste von unten nach oben: 111001.
Die Binärdarstellung von 57 ist also 111001.
Binär nach Hexadezimal
01001010�
0100 1010
0*23 + 1*22 + 0*21 + 0*20 1*23 + 0*22 + 1*21 + 0*20� 0 + 4 + 0 + 0 = 4 8 + 0 + 2 + 0 = 10 = A �
4A
Binär nach Hexadezimal
Versuche nun, die Binärzahl 11011011 in eine Hexadezimalzahl umzuwandeln:
1. Unterteile die Binärzahl in 4er-Päckchen.
2. Wandle jedes Päckchen in die entsprechende Dezimalzahl um.
3. Verwende die gegebene Definition, um die Dezimalzahl in die entsprechende Hexadezimalziffer umzuwandeln.
Hexadezimal nach Binär
Der umgekehrte Weg...
F1816 (386410)
1111 0001 10002
Weil die Konversion zwischen Binär und Hexadezimal so leicht ist, wird Hex oft in der Informatik verwendet. Sozusagen als Kurzschreibweise für Binärfolgen, wie auch das Oktalsystem, mit 8 Ziffern (https://de.wikipedia.org/wiki/Oktalsystem).
Rechnen im Binärsystem
Binäre Addition - Subtraktion
Die Addition funktioniert wie die Addition von Dezimalzahlen:
�
01112 710 � +01002 410� --------------------� 10112 1110 �
“Wir borgen uns immer von der voran gestellten Position etwas aus, wenn wir 0 - 1 haben” (→ 0 - 1 = 1 und Übertrag)
1 0 0 0 12 1710 � - 0 1 1 12 710� --------------------� 1 0 1 02 1010 �
Binäre Multiplikation Division
Regeln� 0 * 0 = 0� 0 * 1 = 0� 1 * 0 = 0� 1 * 1 = 1
1001 * 1011�1001� 0000� 1001� 1001�1100011
110101 : 1010 = 000101 � 1 //passt nicht in 1010� 11 //nope� 110 //nope� 1101 //1101 - 1010�-1010� 00110 � 1101 //1101 - 1010 � -1010� 0011 R�
Übung
Schreibe die Zahl 35 als Binärzahl an (manuelle Umwandlung). Wandle sie dann manuell in eine hexadezimale Zahl um.
Wandle in binäre Zahlen um und führe folgende arithmetischen Operationen durch und schreibe das Ergebnis auch als hexadezimale Zahl an.
Übung in der Konsole (=Terminal)
Binär nach Dezimal Binär nach Hexadezimal
echo "$((2#1010))" printf '%x\n' "$((2#1010))"
Es gibt natürlich auch Konverter im Web: https://www.rapidtables.com/convert/number/index.html
Why binary?
Binärsystem
Vorteile:
Nachteile:
Dezimalsystem
Vorteile:
Nachteile:
Bit - Binary Digit
Kleinstmögliche Einheit von Information
falsch - wahr�nein - ja�ungeladen - geladen�0 - 1
Jedes zusätzliche Bit verdoppelt die Anzahl der Möglichkeiten Information zu repräsentieren.
00 Süd�01 West�10 Nord�11 Ost
000 Süd�001 Südwest�010 West�011 Nordwest�100 Nord�101 Nordost�110 Ost�111 Südost
0 Süd�1 Nord
Bit
Es gibt 2n verschiedene Bitfolgen der Länge n.��Es wächst logarithmisch zur Basis 2.��Mehr Bit, mehr Information… so auch besser Videos:
8 und 16 Bit
Byte
32-bit System und 64-bit System
damit kann man schon recht schöne Bilder, Videos, Spiele etc. machen
damit kann man schon recht schöne Bilder, Videos, Spiele etc. machen
-214623719 Views ?
Overflow
Zahlen sind durch ihre Länge beschränkt. Zahlen liegen an einem beliebigen Ort im Speicher. �
1111 11112 = 25510 = FF16� +0000 00012 = 110 = 116 � --------------------� ist 0?
Zahlendarstellung negativer Zahlen
Wie werden negative Zahlen im Rechner dargestellt?�1112 = 710�� - 1|111 = -7
+ 0|111 = +7
�
Signed Bit
0| 111 7 + (-3) = 4� +1| 011� 1| 010 -2 !?
Einer- und Zweierkomplement
Das Einerkomplement
Jede Zahl wird durch ihr Gegenteil ersetzt: 01011010 | NOT� 10100101
Das Zweierkomplement
Zum Einerkomplement wird zusätzlich �noch 00000001 addiert: 01011010 | NOT� 10100101 � 00000001 |+1� 10100110
Die Subtraktion von 2 Zahlen erfolgt durch die Addition des Zweierkomplementes der zweiten Zahl!
0000 0111 7 - 3 = 4� -0000 0011 �
1 Kompl.: 1111 1100 |NOT� 2 Kompl.: 1111 1101 |+1
0000 0111 7 + (-3) = 4� +1111 1101� 0000 0100��1 der erste fliegt raus��
Jetzt schreiben wir hier ohne das Signed Bit, weil das im Einer- bzw. Zweierkomplement steckt.� “Verwende das Signed Bit wie ein normales Bit.”��Übertrag ganz links wird einfach ignoriert!
Signed Bits im Zweierkomplement
1001 ist die Darstellung von -7 im Zweierkomplement
Binäre Subtraktion und negative Zahlen
0000 10102 = 1010� - 0000 11102 = 1410��Jetzt wollen wir das Zweierkomplement von 00001110 mit 00001010 addieren um zu subtrahieren.
Einerkomplement Zweierkomplement� 0000 11102 |NOT → 0000 00012� 0000 00012 → +0000 00012� 0000 00102
0000 10102� +0000 00102� 0000 11002 = 1210 ? → erstes Bit ist jetzt das Singed Bit und definiert das � Vorzeichen, 1|100 und 1002 = 410�
Gleitkommadarstellung
Screenshot aus https://www.youtube.com/watch?v=1GSjbWt0c9M&list=PLaHADNRco7n0KyC3U61AYOQKIGa5S-yUL&index=10&t=181s
625,9 kann man auch schreiben als 0,6259 * 103
Zeichenkodierung
Schei� encoding
Kodierungen und ähnliches
American Standard Code for Information Interchange - ASCII
7-Bit Zeichenkodierung��000 0000 = 0 = null��111 1111 = 127 = DEL
A = 65 → 100 0001�B = 66 → 100 0010�C = 67 → 100 0011��a = 97 → 110 0001�b = 98 → 110 0010�c = 99 → 110 0011��
most significant Bits
least significant Bits
Welches Wort ist hier kodiert?
01001010 01101111 01101110 00100000 01010011 01101110 01101111 01110111
74 111 110 32 83 110 111 119
�� J o n \w S n o w� �
UNICODE : “One format to rule them all”
Unicode-Standard kodierte elementare Zeichen mittels Code Points (Unicode Number).�https://unicode-table.com
Kodierung mit https://www.branah.com/unicode-converter: Jon Snow��UTF-32 0000004a0000006f0000006e 000000530000006e0000006f00000077� 1 Zeichen wird mittels 4 Byte kodiert.� 2.147.483.647 unterschiedliche Zeichen� Nachteil: Sehr viel Speicherplatz; Vorteil: Direktzugriff da Code Point��UTF-8 \x4a\x6f\x6e \x53\x6e\x6f\x77� variabler Länge zugeordnet� auch 4 Byte� alle Unicode-Zeichen abbildbar, weniger Speicher, da Algorithmus(!) � (siehe Computerphile: https://www.youtube.com/watch?v=MijmeoH9LT4&t=334s)
“UTF-8 Hack”
�� 110x xxxx 10xx xxxx
1110 xxxx 10xx xxxx 10xx xxxx
1111 11xx 10xx xxxx 10xx xxxx …
UTF-8 Algorithmus: 6:40
110x … definiert Beginn und � wie viele Bytes noch kommen
10 … beginn eines nächsten Byte
x … Platz für das eigentliche Zeichen
UTF-8
Zusammenfassung
In der Konsole
ls … zeigt uns an wo wir sind
cd … so können wir einen Ordner weiter gehen
cd .. … einen Ordner zurück
mkdir … einen neuen Ordner erstellen ( mkdir MeinGDIOrdner )
touch … ein neues Textfile erstellen ( touch encoding.txt)
>> … echo Hier ist ein Text >> encoding.txt
file -i … zeigt uns das Encoding einer Datei an (file -i encoding.txt)
hexdump … wandelt text in ihre Hex-Kodierung um (hexdump encoding.txt.)
Übung
Wenden wir das an auf
Was verändert sich und warum?