Informationsmenge Maßeinheit: 1 Bit Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit 1 Byte Zusammenfassung von 8 Bit, kleinste Speichereinheit im Computer, liefert 28 = 256 Bitkombinationen Umrechnungen: 1 Kilobyte = 210 Byte = 1.024 Byte 1 Megabyte = 210 kB = 1.048.576 Byte 1 Gigabyte = 210 MB = 1.048.576 KB = 1.073.741.824 Byte 1 Terabyte = 210 GB = ... Codierung 1 Codierung Zuordnung von Zeichen eines Alphabets zu Zeichen eines anderen Alphabets Text, z.B. ASCII: 01000001 01000010 01000011 01000100 bedeutet bedeutet bedeutet bedeutet A B C D Zahlen, z.B. Binärcode: 0000 0001 0010 0011 0100 0101 bedeutet bedeutet bedeutet bedeutet bedeutet bedeutet 0 1 2 3 4 5 Codierung 2 Codierung Darstellung von Text Zur Darstellung von Texten werden das Textalphabet und die Satzzeichen mit Bitfolgen codiert. Gebräuchlichste Codierung: 7 Bit ASCII (American Standard Code for Information Interchange) erweiterter ASCII: 8 Bit (einige sprachspezifische Symbole) UNICODE: 16 Bit (‚alle Sprachen der Welt‘) Codierung 3 ASCII ASCII = American Standard Code for Information Interchange 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 bl ! " # $ % & ' ( ) * + , . / Beispiele: 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 0 1 2 3 4 5 6 7 8 9 : ; < = > ? A a F f 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 065 097 070 102 @ A B C D E F G H I J K L M N O 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 P Q R S T U V W X Y Z [ \ ] ^ _ 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 ` a b c d e f g h i j k l m n o 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 p q r s t u v w x y z { | } ~ del 0100 0001 0110 0001 0100 0110 0110 0110 Codierung 4 Codierung Darstellung von Zahlen Für die maschinelle Verarbeitung von Zahlenwerten ist eine binäre Codierung sehr gut geeignet. Als Alphabet werden häufig die Zeichen { 0,1 } verwendet. In der elektronischen Realisierung entspricht z.B. 0 : Spannung < 1.5 Volt 1 : Spannung > 3.5 Volt Alle Berechnungen werden zur Basis 2 (Dual-, Binärsystem) durchgeführt. Codierung 5 Arithmetische Operationen Elementare Zahlenarten: Natürliche Zahlen (positiv, z.B. 1, 2, 3, …) Ganze Zahlen (positiv und negativ, z.B. -5, 0, 2, 42, …) Rationale Zahlen (z.B. -2/3, 7/2, 13/17, …) Reelle Zahlen (ganze und rationale sowie irrationale Zahlen wie oder 2) Codierung 6 Zahlensysteme: Dezimalsystem Darstellung von ganzen Zahlen Jede Ziffer innerhalb einer Zahl besitzt einen Ziffernwert und einen Stellenwert. Beispiel: 1235 = + + + 5*1 3 * 10 2 * 100 1 * 1000 = 5 * 100 + 3 * 101 + 2 * 102 + 1 * 103 Ziffernwert * Stellenwert Codierung 7 Zahlensysteme: Dezimalsystem Verallgemeinerung für das Dezimalsystem: Der Zahlenwert a ist die Summe über alle Stellen i = 0, ..., n der einzelnen Produkte aus Ziffernwert zi und Stellenwert 10i Also: n a = z i * 10 i i=0 Codierung 8 Zahlensysteme: Beliebiges Zahlensystem Verallgemeinerung für ein beliebiges Zahlensystem : Für ein beliebiges Zahlensystem gilt : n a = zi*Bi i=0 Hierbei ist B die Basis des Zahlensystems und die darin gültigen Ziffern zi können die Werte 0,1,..., B-1 annehmen. Codierung 9 Arithmetische Operationen Darstellung ganzer Zahlen Dezimalsystem: 0,…,9 Zur binären Darstellung der 10 Ziffern werden 4 Bits benötigt. Mit 4 Bits können 16 Ziffern codiert werden. Für die weiteren 6 Ziffern werden die Zeichen A,…,F eingeführt und der Hexadezimalcode definiert. Zahlensystem Dualsystem Oktalsystem Dezimalsystem Hexadezimalsystem Basiszahl 2 8 10 16 Zeichenvorrat 0,1 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Codierung 10 Ganze Zahlen (ohne Vorzeichen) a = zi * Bi Wertebereich: 0 a 2n - 1 Codierung 11 Ganze Zahlen (ohne Vorzeichen) Beispiel Umrechnung in Basis 2 (235)10 = (a)2 235 : 2 = 117, 117 : 2 = 58, 58 : 2 = 29, 29 : 2 = 14, 14 : 2 = 7, 7 : 2 = 3, 3 : 2 = 1, 1 : 2 = 0, Rest 1 Rest 1 Rest 0 Rest 1 Rest 0 Rest 1 Rest 1 Rest 1 20 * 1 21 * 1 22 * 0 23 * 1 24 * 0 25 * 1 26 * 1 27 * 1 = = = = = = = = 1 + 2+ 8+ 32 + 64 + 128 11101011 = (235)10 Codierung 12 Ganze Zahlen (ohne Vorzeichen) Beispiel Umrechnung in Basis 8 (235)10 = (a)8 235 : 8 = 29, 29 : 8 = 3, 3 : 8 = 0, Rest 3 Rest 5 Rest 3 80 * 3 81 * 5 82 * 3 = = = 3+ 40 + 192 + 3538 = (235)10 Codierung 13 Ganze Zahlen (mit Vorzeichen) Wertebereich: -2n-1+1 a 2n-1 -1 Most Significant Bit (MSB) definiert das Vorzeichen. Vorzeichen muss gesondert ausgewertet werden. Zwei Darstellungen der 0, nämlich +0 und -0 Codierung 14 Ganze Zahlen (mit Vorzeichen) Binary Offset Der kleinstmögliche Wert wird mit 0000… und der größtmögliche Wert wird mit 1111… dargestellt. Wertebereich: -2n-1 a 2n-1 -1 a = D – O; D: binäre Darstellung, Offset O = 8 Nur eine Darstellung der 0. Findet Verwendung beim Exponent der IEEE 754 Codierung 15 Ganze Zahlen im Einerkomplement Most Significant Bit (MSB) definiert das Vorzeichen. positive Zahl: MSB = 0, Die drei niederwertigen Bits werden wie gewohnt ausgewertet negative Zahl: MSB = 1, Die drei niederwertigen Bits werden invertiert und anschließend ausgewertet Wertebereich: -2n-1+1 a 2n-1 -1 Codierung 16 Ganze Zahlen im Einerkomplement Beispiel Einerkomplement -3 soll binär als Einerkomplement dargestellt werden binäre Darstellung des Betrags (3)10 = (0011)2 Setzen des Vorzeichens und Komplement der Bits (-3)10 = (1100)2-1K Codierung 17 Ganze Zahlen im Zweierkomplement Most Significant Bit (MSB) definiert das Vorzeichen. positive Zahl: MSB = 0, Die drei niederwertigen Bits werden wie gewohnt ausgewertet. Wertebereich: -2n-1 a 2n-1 -1 negative Zahl: MSB = 1, Die drei niederwertigen Bits werden invertiert, 1 addiert und anschließend ausgewertet. Codierung 18 Ganze Zahlen im Zweierkomplement Vorteil der Zweierkomplement-Darstellung Es existiert nur eine Null. Null ist zu sich selbst Komplement (0000)2k = (0000)1k + 1 = FFFF +1 = 0 Das Vorzeichenbit muss für Addition und Subtraktion nicht gesondert ausgewertet werden. Signifikante Vereinfachung der Berechnung. Zweierkomplement wird in der Praxis fast ausschließlich eingesetzt. Codierung 19 Addition und Subtraktion Addition: 0 + 0 = 0, 1 + 0 = 1, 0 + 1 = 1, 1 + 1 = 0, kein Übertrag (‚Carry‘) kein Übertrag kein Übertrag Übertrag 1 Subtraktion: 0 - 0 = 0, kein Übertrag 1 - 0 = 1, kein Übertrag 0 - 1 = 1, Übertrag 1 1 - 1 = 0, kein Übertrag Codierung 20 Beispiele Addition und Subtraktion Ganze Zahlen ohne Vorzeichen 610 + 310 C = 910 0110 0011 110 1001 610 - 310 C = 310 0110 0011 011 0011 Ganze Zahlen mit Vorzeichen (Zweierkomplement) 610 0110 +(-310) 1101 C 100 = 310 10011 310 +(-610) C =-310 0011 1010 010 1101 Codierung 21 Beispiele Addition und Subtraktion Ganze Zahlen ohne Vorzeichen 1510 + 110 C =1610 1111 0001 111 10000 Übertrag (Carry, C, CY) Überlauf (Overflow, O, OV) Ganze Zahlen mit Vorzeichen (Zweierkomplement) 610 + 210 C =-810? 0110 0010 110 1000 -710 1001 +(-610) 1010 C 000 =+310? 10011 Codierung 22 Addition und Subtraktion Übertrag (Carry) Ein Übertrag entsteht, wenn bei Operationen mit nur positiven Zahlen der Wertebereich überschritten wird. Codierung 23 Addition und Subtraktion Überlauf (Overflow) Ein Überlauf entsteht, wenn bei Operationen von Zweierkomplement-Zahlen der Wertebereich überschritten wird. Ein Überlauf liegt dann vor, wenn beide Summanden das gleiche Vorzeichen haben und das Ergebnis ein anderes. Codierung 24 Rationale Zahlen Bisher haben wir die binäre Darstellung der ganzen Zahlen kennen gelernt: Integer n a = zi*Bi i=0 mit B = 2 Darstellung gebrochener Zahlen (Rationaler Zahlen): Festkomma-Darstellung Fließkomma-Darstellung (Floating Point) Codierung 25 Rationale Zahlen Festkomma-Zahlen a in i m zi bi znb n zn 1b n 1... z1b z0 z1b 1 ... z mb m n+1 Bits für Vorkomma-, m Bits für Nachkommastellen Es ist Konvention, die Ziffern mit absteigendem Index i als Liste darzustellen und zwischen z0 und z-1 ein Komma einzufügen. a z3 b 3 z 2 b 2 z1 b1 z0 b 0 z 1 b 1 z 2 b 2 z 3 b 3 z 4 b 4 Codierung 26 Rationale Zahlen (123,4567)10 0 1000 1100 2 10 3 1 4 5 6 7 10 100 1000 10000 in gleicher Weise kann man binäre Zahlen darstellen: 1 1 0 1 (1001,1101) 2 1 8 0 4 0 2 1 1 2 4 8 16 In diesem Beispiel ist also (1001,1101)2 = (9,8125)10 Bei Festkomma-Zahlen ist der Wertebereich stark eingeschränkt! Codierung 27 Umwandlung von Nachkommastellen einer Dezimalzahl Beispiel (0,28125)10 : 0,28125*2 = 0,5625 0,5625*2 = 1,125 0,125*2 = 0,25 0,25*2 = 0,5 0,5*2 = 1,0 (0,28125)10 = (0,01001)2 Codierung 28 Beispiel Zweierkomplement Festkommazahl Umwandlung binär dezimal, MSB = 1 a = (1011,0110)2 falls MSB = 1 Zahl ist negativ, dann Betrag berechnen Komplement aller Bits, 1 addieren (1011,0110)2-2K = (0100,1001)2 +(1)2 = (0100,1010)2 |a| = (4,625)10 Vorzeichen negativ a = -4,625 Codierung 29 Beispiel Zweierkomplement Festkommazahl Umwandlung dezimal binär, a < 0 a = (-4,625)10 falls a < 0 Zahl ist negativ, dann Betrag berechnen: Vorkomma Nachkomma 4:2 = 2, R=0 0,625* 2 = 1, r=0,25 2:2 = 1, R=0 0,25 * 2 = 0, r=0,5 1:2 = 0, R=1 0,5 * 2 = 1, r=0 |a| = 0100,1010 Komplement aller Bits, 1 addieren (0100,1010)2-2K = (1011,0101)2 +(1)2 = (1011,0110)2 a = (1011,0110)2 Codierung 30 Rechnerinterne Darstellung einer Fließkomma-Zahl Allgemeine Darstellung: z = (-1)s 1.f 2 e-o s = Vorzeichen (Signum, sign, 0 = positiv, 1 = negativ) f = Fraktion, fraction e = Exponent o = Offset (127 bzw. 1023) wg. Wertebereich 1.f: normalisierte Darstellung: 1 vor Binärpunkt ist implizit, d.h. wird angenommen, nicht dargestellt 0.f: denormalisierte Darstellung: in besonderen Fällen wird keine binäre 1 angenommen. Codierung 31 Rechnerinterne Darstellung einer Fließkomma-Zahl Beispiel: Darstellung von 45.62510 Vorgehensweise: binäre Darstellung der Vorkommastellen binäre Darstellung der Nachkommastellen binäre Darstellung der Zahl Normalisierung und Bestimmung Exponent Darstellung von Fraktion f Darstellung des Exponenten e Bestimmung des Vorzeichens s Codierung 32 Rechnerinterne Darstellung einer Fließkomma-Zahl Beispiel Fließkomma-Zahl 4510 = 1011012 Nachkommastellen 0.6252 = 1.25 0.25 2 = 0.5 0.5 2 = 1.0 0.62510 = 1012 2-3 = 0.1012 45.62510 = 45 + 0.625 = 101101.1012 101101.1012 = 1.011011012 2+5 normalisiert, E = 5 Bestimmung Fraktion 1.01101101, also f = 01101101 dargestellter Exponent e: E = e-o e = E+o; o=127 (single) = 5+127 = 132 = 100001002 Vorzeichen s = 0 (pos) Codierung 33 Rechnerinterne Darstellung einer Fließkomma-Zahl Beispiel: 45.62510 Fraktion f = 01101101 (beachte 1.01101101) bit 0-22 dargestellter Exponent e = 10000100 bit 23-30 Vorzeichen s = 0 bit 31 Damit ist die Darstellung im IEEE 754-Format mit einfacher Genauigkeit (single precision – 32 Bit): 0100 0010 0011 0110 1000 0000 0000 0000 entspricht hexadezimal 42 36 80 00 Codierung 34 Rechnerinterne Darstellung einer Fließkomma-Zahl Spezielle Werte: Zahl Null kann nicht direkt dargestellt werden. Darstellung durch e=0 und f=0 Unendlich, Infinity Darstellung alle Bits im Exponenten 1, f=0; Unterscheidung von Infinity durch s=0 oder 1 Not-a-Number NaN, Darstellung ist keine Zahl. Darstellung alle Bits im Exponenten 1, f0; Beispiele: ±nichtnull / 0 = ±Infinity ±Infinity / ±Infinity = NaN Codierung 35 Rechnerinterne Darstellung einer Fließkomma-Zahl Formatspezifikationen der IEEE 754 Codierung 36