1 of 46

Grundlagen der

Informatik (VO)

�Kodierung und Bits & Bytes

Christopher Pollin

Institut für Digitale Geisteswissenschaften,�https://digital-humanities.uni-graz.at

2 of 46

3 of 46

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

4 of 46

5 of 46

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}�

6 of 46

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

7 of 46

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

8 of 46

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

9 of 46

Hands-On: Binär zu Dezimal Umrechnung

Rechne folgende binäre Zahl in das Dezimalsystem um: 01001010

Hinweise:

  1. Identifiziere die Stellenwerte von rechts nach links (2⁰, 2¹, 2², 2³, ...)
  2. Multipliziere jede Binärziffer mit ihrem entsprechenden Stellenwert
  3. Addiere alle Ergebnisse

10 of 46

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

11 of 46

Hands-On: Binär zu Dezimal Umrechnung (LLM Lösung)�11010101

12 of 46

Dezimal nach Binär

  1. Die Zahl durch 2 dividieren
  2. Den Rest der Division notieren.
  3. Falls das Ergebnis nicht 0 ist, Schritt 1 und 2 wiederholen.
  4. Die Restergebnisse von unten nach oben lesen �(manchmal gibts es vorangehende 0en, um auf ein Byte (8 Bit) aufzuschließen, für die Zahlendarstellung können sie aber ignoriert werden)

� 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

13 of 46

Hands-On: Dezimal nach Binär

Versuche nun, die Dezimalzahl 57 in eine Binärzahl umzuwandeln:

  • Teile die Zahl 57 durch 2 und notiere den Rest.
  • Wiederhole den Vorgang mit dem Ergebnis der Division, bis das Ergebnis 0 ist.
  • Lies die Reste von unten nach oben, um die Binärzahl zu erhalten.

14 of 46

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.

15 of 46

Binär nach Hexadezimal

  1. Unterteile die Binärzahl von rechts nach links in 4er-Päckchen.
  2. Jede Ziffer auflösen (Blick auf Tabelle, Folie 7).
  3. Wandle jedes Päckchen in die entsprechende Hexadezimalziffer um. Alphabet = {1, 2, 3, 4, 5, 6, 7, 8 , 9, A, B, C, D, E, F}

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

16 of 46

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.

17 of 46

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).

18 of 46

Rechnen im Binärsystem

19 of 46

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

20 of 46

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

21 of 46

Ü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.

  • 3 + 7 = ?
  • 20 - 6 = ?
  • 12 / 3 = ?
  • 2 * 6 = ?

22 of 46

23 of 46

Ü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

24 of 46

Why binary?

Binärsystem

Vorteile:

  1. Einfache elektronische Implementierung
  2. Hohe Stabilität und Fehlertoleranz
  3. Effiziente Logikoperationen
  4. Grundlage für digitale Schaltungen

Nachteile:

  1. Weniger intuitiv für Menschen
  2. Längere Zahlenrepräsentationen

Dezimalsystem

Vorteile:

  1. Intuitiv für Menschen (10 Finger)
  2. Effizient für alltägliche Berechnungen
  3. Kompaktere Darstellung großer Zahlen
  4. Direkte Kompatibilität mit vielen realen Anwendungen

Nachteile:

  1. Komplexere elektronische Umsetzung
  2. Höhere Fehleranfälligkeit in digitalen Systemen
  3. Weniger effizient für binäre Logikoperationen

25 of 46

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

26 of 46

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:

27 of 46

8 und 16 Bit

28 of 46

Byte

  • 1 Byte = 8 bit�
  • 1 Kilobyte (KB) = 1024 Byte�
  • 1 MB = �1024 KB = �1.048.576 Byte�
  • 1 GB = �1024 MB) = �1.048.576 KB = �1.073.741.824 Byte

29 of 46

32-bit System und 64-bit System

  • Dies operieren mit 32 bzw. 64 Bits.�
  • Mit 32-bit ist die größte Zahl die repräsentieren werden kann: � 4 294 967 294

damit kann man schon recht schöne Bilder, Videos, Spiele etc. machen

  • Mit 64-bit ist die größte Zahl die repräsentieren werden kann: � 9 223 372 036 854 775 807

damit kann man schon recht schöne Bilder, Videos, Spiele etc. machen

30 of 46

-214623719 Views ?

31 of 46

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?

32 of 46

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 !?

33 of 46

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!

34 of 46

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!

35 of 46

Signed Bits im Zweierkomplement

1001 ist die Darstellung von -7 im Zweierkomplement

36 of 46

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

37 of 46

Gleitkommadarstellung

625,9 kann man auch schreiben als 0,6259 * 103

38 of 46

Zeichenkodierung

Schei� encoding

Kodierungen und ähnliches

39 of 46

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

40 of 46

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� �

41 of 46

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\x77variabler 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)

42 of 46

“UTF-8 Hack”

  • ASCII, Rüchwärtskomatibel
  • 0000 0000 kann null sein� https://unicode-table.com/en/#0000
  • Speicherplatz, kein Index

�� 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

43 of 46

UTF-8

  • Empfehlung: Verwende, wo immer es geht, UTF-8!�
  • Unicode bietet benötigte Freiheit im Web�
  • alle Zeichen�
  • Server, Browser, Datenbanken, Programmiersprachen, Editoren.

44 of 46

Zusammenfassung

  • Zahlensysteme: Binär, Dezimal, Hexadezimal
  • Zahlenumwandlung
  • Bits und Bytes
  • Rechnen mit Binärzahlen
  • Overflow und negative Zahlen
  • Zeichenkodierung ASCII, UNICODE, UTF

45 of 46

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.)

46 of 46

Übung

Wenden wir das an auf

  • eine .txt Datei die leere und noch nie bearbeitet wurde
  • eine .txt Datei in der “hallo” steht
  • eine .txt Datei in der “hallo Öl” steht.
  • verwenden wir hexdump auf das .txt.

Was verändert sich und warum?