Computer-Systeme Teil 4: Weitere Datentypen Verbesserte Version Computer-Systeme WS 12/13 Teil 4/Datentypen 31.10.2012 1 Literatur I [4-1] [4-2] [4-3] [4-4] Engelmann, Lutz (Hrsg.): Abitur Informatik Basiswissen Schule. Duden-Verlag, 2003, S.228-238 Hübscher, Heinrich et al.: IT-Handbuch, IT-Systemelektroniker/-in, Fachinformatiker/-in. Westermann, 2. Auflage, 2001, S.71,100,103 Kelch, Rainer: Rechnergrundlagen Von der Binärlogik zum Schaltwerk. Fachbuchverlag Leipzig, 2003, S.66-78 A.S. Tanenbaum, J. Goodman: Computerarchitektur. Prentice Hall, 2001, S.155-166 Computer-Systeme WS 12/13 Teil 4/Datentypen 2 1
Literatur II [4-5] [4-6] [4-7] [4-8] [4-9] [4-10] Engelmann, Lutz (Hrsg.): Abitur Informatik Basiswissen Schule. Duden-Verlag, 2003, S.21-24, 226-227, 235-238 Hübscher, Heinrich et al.: IT-Handbuch, IT-Systemelektroniker/-in, Fachinformatiker/-in. Westermann, 2. Auflage, 2001, S.70, 88-89 Kelch, Rainer: Rechnergrundlagen Von der Binärlogik zum Schaltwerk. Fachbuchverlag Leipzig, 2003, S.37-65 A.S. Tanenbaum, J. Goodman: Computerarchitektur. Prentice Hall, 2001, S.165-169, 173-187 Plate, Jürgen: Einführung Datenverarbeitungssysteme. http://www.netzmafia.de/skripten/dvs/dvs7.html http://www.netzmafia.de/skripten/dvs/dvs3.html http://www.netzmafia.de/skripten/dvs/dvs4.html http://de.wikipedia.org/wiki/fpu Computer-Systeme WS 12/13 Teil 4/Datentypen 3 Übersicht Präsentation und Repräsentation Begriff des Algorithmus Datentyp Boolean Datentyp Char (Zeichen) Datentyp Integer Datentype Float Computer-Systeme WS 12/13 Teil 4/Datentypen 4 2
Ziel Es werden die Repräsentationen mathematischer und logischer Sachverhalte ("Objekte") innerhalb Computern vorgestellt. Repräsentation = Interne Darstellung eines Sachverhaltes oder einer Sache (Objekt) Präsentation = Wahrnehmbare äußere Darstellung eines Sachverhaltes oder einer Sache (Objekt) In diesem Teil werden die Repräsentationen von Daten, genauer von Variablen von bestimmten Typen betrachtet. Computer-Systeme WS 12/13 Teil 4/Datentypen 5 Variablen vom Typ Boolean Bei diesem Typ reicht 1 Bit zur Unterscheidung der beiden Werte (Zustände): True und False. Meistens wird der Wert 0 als False und alle anderen Werte als True angesehen. Welt des Programmierens Welt der Hardware EsRegnet [08] [09] [10] [11] Speicherzellen jeweils 1 Byte Adressen Computer-Systeme WS 12/13 Teil 4/Datentypen 6 3
Aufzählungstypen Beispiel für Werte einer Variablen für Wochentage: Wert Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag Bitkombination 000 001 010 011 100 101 110 Codierung Welt des Programmierens Wochentag Welt der Hardware [08] [09] [10] [11] Computer-Systeme WS 12/13 Teil 4/Datentypen 7 Zur Darstellung von Zeichen Zeichen = Element aus einem schriftlichen Alphabet Das schriftliche Alphabet besteht aus den "Zeichen" der Schriftsprache: z. B.: a, b, c, %, 6,?, D, ä, ß etc. Character = Zeichen, Kürzel: Char Eine Variable kann als Wert Zeichen annehmen. Symbol Variable Repräsentation Zeichen "Z" Zustand 'a' 'a' 0110.1000 'b' 'b' Werte 0110.0100......... Die Variable Z symbolisiert einen Buchstaben in ASCII codiert. Computer-Systeme WS 12/13 Teil 4/Datentypen 8 4
Zeichencodes I Schriftliches Alphabet (in den USA) 26 Kleinbuchstaben 26 Großbuchstaben 10 Ziffern 33 Sonderzeichen 33 Steuerzeichen ASCII-Code (American Standard Code for Information Exchange, DIN 66003) 'a' 0110.0001 'b' 0110.0010 'c' 0110.0011... 7 Bits erforderlich Zeichencode = Code = Menge von Zeichen (definiert durch ihre Präsentation) Computer-Systeme WS 12/13 Teil 4/Datentypen 9 Zeichencodes II ASCII enthält keine Umlaute, wie z. B. 'ä', 'å' oder 'æ'. Es gibt aber Erweiterungen, die nicht von allen Betriebssystemen gleich behandelt werden. UNICODE enthält weltweit standardisiert viele besondere Zeichen, auch aus dem arabischen, chinesischen oder koreanischen Raum, benötigt aber dazu mehrere Bytes. Um ein Zeichen zu speichern oder zu verarbeiten wird die interne Repräsentation (8, 16 bit oder mehr) entsprechend dem Code als Einheit interpretiert, z. B. beim Ausdrucken muss bei "0110.0001" ein "a" auf dem Papier erscheinen, wenn der ASCII-Code zugrunde gelegt wird. Computer-Systeme WS 12/13 Teil 4/Datentypen 10 5
ASCII-Code 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 000 001 010 011 100 101 110 111 Vorderer Teil NUL DLE SP 0 @ P ` p SOH DC1! 1 A Q a q STX DC2 " 2 B R b r ETX DC3 # 3 C S c s EOT DC4 $ 4 D T d t ENQ NAK % 5 E U e u ACK SYN & 6 F V f v BEL ETB 7 G W g w BS CAN ( 8 H X h x HT EM ) 9 I Y i y LF SUB * : J Z j z VT ESC + ; K [ k { FF FS, < L \ l CR GS - = M ] m } SO RS. > N ^ n ~ SI US /? O _ o DEL Computer-Systeme WS 12/13 Teil 4/Datentypen 11 Lesen der ASCII-Code-Tabelle 1. Bestimmen des Zeichens mit Reihe und Spalte Z.B. "W": 7. Spalte (von links), 9. Zeile (von unten) 2. Setzen des Bit 7 auf 0 3. Ablesen der drei Bits 4 bis 6 aus der Spaltenbeschriftung Z.B. "W": 7.Spalte: 101 4. Ablesen der vier Bits 0 bis 3 aus der Reihenbeschriftung Z.B. "W": 9. Zeile: 0111 5. Zusammensetzen der drei Werte Z.B. "W": 0 + 101 + 0111 -> 0101.0111 Bemerkung: Die Bits werden von 0 bis 7 nummeriert, wobei Bit 0 das von der Wertigkeit her kleinste Bit ist. Computer-Systeme WS 12/13 Teil 4/Datentypen 12 6
7 Computer-Systeme WS 12/13 Teil 4/Datentypen 13 ASCII-Code und die Standardisierungen 1962 wurde der ASCII-Code zum ISO Standard 646. Es wurden auch länderspezifische Erweiterungen festgelegt, z. B. ISO 646-US, ISO 646-UK Das 8. Bit war ursprünglich zur Fehlerfeststellung (Parität) vorgesehen, wird aber zur Erweiterung des Codes benutzt. Es gibt herstellerspezifische Erweiterungen für die Code- Werte 128 bis 255, z. B. Zeichen für die Blockgrafiken (siehe http://de.wikipedia.org/wiki/codepage_850) Es gibt auch standardisierte 8-Bit-Erweiterungen, z. B.: ISO 8859-1 (ISO Latin1) westliche Alphabete ISO 8859-2 (ISO Latin2) osteuropäische Alphabete ISO 8859-5 kyrillisch ISO 8859-6 arabisch ISO 8859-15 ISO Latin1 mit EURO-Symbol Computer-Systeme WS 12/13 Teil 4/Datentypen 14 Codepage 850 aus Wikipedia ² ³ ¹ ¾ ± - F* Ý ý Ù Û Ú Þ þ µ Õ õ Ò Ô ß Ó E* Ì Ï Î Í ı È Ë Ê Ð ð D* Ã ã C* À Â Á B*» «¼ ½ º ª Ñ ñ ú ó í á A* ƒ Ø ø Ü Ö ÿ ù û ò ö ô Æ æ É 9* Å Ä ì î ï è ë ê ç å à ä â é ü Ç 8* ~ } { z y x w v u t s r q p 7* o n m l k j i h g f e d c b a ` 6* _ ^ ] \ [ Z Y X W V U T S R Q P 5* O N M L K J I H G F E D C B A @ 4*? > = < ; : 9 8 7 6 5 4 3 2 1 0 3* /. -, + * ) ( ' & % $ # "! 2*!! 1* 0* *F *E *D *C *B *A *9 *8 *7 *6 *5 *4 *3 *2 *1 *0 http://de.wikipedia.org/wiki/codepage_850, siehe auch ftp://ftp.unicode.org/public/mappings/vendors/micsft/pc/cp850.txt
Bemerkungen Es gibt viele Arten der Codierung - diese hängen vom Verwendungszweck ab: Codierung von Zeichen Codierung von Audio-Signalen, z. B. Musik Codierung von Fernsehsignalen... Weitere Beispiele für Codes: Morse-Code Flaggen-Code für die Schifffahrt Lochkartencodes Lochstreifencode Barcode Computer-Systeme WS 12/13 Teil 4/Datentypen 15 Darstellung der Natürlichen Zahlen Eine Kette von Bits wird zur Darstellung der natürlichen Zahlen verwendet analog zur Codierung von Zeichen. Die Bits werden als Koeffizienten eines Polynoms zur Berechnung des Zahlenwert interpretiert. Das Polynom entspricht einer Codierungsvorschrift. Zahl= a n *B n + a n-1 *B n-1 +.. + a 1 *B 1 +a 0 *B 0 [Polynom] Beispiel mit B=10 (Dezimal-System): 1984 = 1*10 3 + 9*10 2 + 8*10 1 + 4*10 0 Beispiel mit B=2 (Binär- oder Dual-System): 13 = 1*2 3 + 1*2 2 + 0*2 1 + 1*2 0 = 1101 (binär) 1 1 0 1 Zusammenfassung von 4 Bits zu einer binären Zahl Interpretation der Bits entsprechend der Polynom-Formel Computer-Systeme WS 12/13 Teil 4/Datentypen 16 8
Algorithmus I Intuitiv kann ein Algorithmus als eine präzise Vorschrift, um aus gegebenen Dingen in endlichen vielen Schritten bestimmte andere Dinge zu erzeugen, verstanden werden. Ein Algorithmus (auch Lösungsverfahren) ist eine formale Handlungsvorschrift zur Lösung eines Problems oder einer Bestimmten Art von Problemen in endlich vielen Schritten. Aus Wikipedia http://de.wikipedia.org/wiki/algorithmus Weitere Beispiele: siehe http://www.informatikjahr.de/index.php?id=193&l=0 Computer-Systeme WS 12/13 Teil 4/Datentypen 17 Algorithmus II Der "Erfinder" des Algorithmus ist der persische Mathematiker und Astronom Abu Jafar Mohammed Ibn Musa Al-Chwarizmi, 825 Lehrbuch: Kitab al jabr w'almuquabala (Regeln der Wiedereinsetzung und Reduktion) Aber auch griechische Wurzel im Begriff arithmos (Zahl). Computer-Systeme WS 12/13 Teil 4/Datentypen 18 9
Algorithmus und Realisierung Der Algorithmus beschreibt die Lösungsidee - den prinzipiellen Gang zur Lösung. Ein Algorithmus ist daher kein Programm. Programm = Kette von Befehlen/Anweisungen in einer Programmiersprache entsprechend der Idee des Algorithmus Ein Programm wird immer in einer Sprache, der Programmiersprache ausgedrückt. Verschiedene Programme in einer oder verschiedenen Programmiersprachen können einen Algorithmus realisieren. Computer-Systeme WS 12/13 Teil 4/Datentypen 19 Algorithmus: Dezimal nach Binär I 1979 nach Binär: 11110111011 Ganzahlige Division Rest 1979 : 2 = 989 1 989 : 2 = 494 1 494 : 2 = 247 0 247 : 2 = 123 1 123 : 2 = 61 1 61 : 2 = 30 1 30 : 2 = 15 0 15 : 2 = 7 1 7 : 2 = 3 1 3 : 2 = 1 1 1 : 2 = 0 1 Leserichtung Computer-Systeme WS 12/13 Teil 4/Datentypen 20 10
Algorithmus: Dezimal nach Binär II (1) Z:= Lies_Zahl_ein (2) Kette:= "" (3) Basis:= 2 (4) WHILE Z > 0 DO (5) Ziffer:= Z mod Basis // Rest von Division (6) Füge_Ziffer_vor_Kette (7) Z:= Z div Basis // ganzzahlige Division (8) OD (9) Gib_aus(Kette) Die Notation ist eine Freistilnotation, die zu keiner Programmiersprache gehört, sondern lediglich die Idee des Verfahrens verdeutlichen soll. Computer-Systeme WS 12/13 Teil 4/Datentypen 21 Erläuterungen I "A := B" ist eine Zuweisung, bei der der Wert rechts vom ":=" der Variablen links davon zugewiesen wird. "WHILE Bedingung DO... OD" gibt eine Wiederholung des Teils zwischen DO und OD an, die solange durchgeführt wird, wie die Bedingung wahr ist, wobei vor jedem Schleifendurchlauf die Bedingung geprüft wird. // leitet einen Kommentar ein, der am Zeilenende endet Computer-Systeme WS 12/13 Teil 4/Datentypen 22 11
Erläuterungen II (div und mod) D = Zahl DIV Basis M = Zahl MOD Basis Zahl = D*Basis + M Ist Basis=2: IF Zahl ist gerade THEN M:= 0 ELSE M:= 1 FI Zahl:= (Zahl-M) / 2 "/" ist das Zeichen für die Division. "IF Bedingung THEN... ELSE... FI" ist eine Prüfbedingung, wobei der Teil zwischen THEN und ELSE ausgeführt, wenn die Bedingung wahr ist, ansonsten der Teil zwischen ELSE und FI. Computer-Systeme WS 12/13 Teil 4/Datentypen 23 Weitere Zahlensysteme Ziffernvorrat Basis Ziffern Binärsystem 2 0 1 Oktalsystem 8 0 1 2 3 4 5 6 7 Dezimalsystem 10 0 1 2 3 4 5 6 7 8 9 Hexadezimalsystem 16 0 1 2 3 4 5 6 7 8 9 A B C D E F Neben dem Dezimalsystem spielt in einigen Fällen das oktale und das hexadezimale eine Rolle. Mit Binär wird in der Praxis nicht gearbeitet. Aus dem Binärsystem lassen sich sehr leicht die Ziffern des oktalen (jeweils 3 Bits) und des hexadezimalen (jeweils 4 Bits) System herleiten. "Oktal" kommt von octo (lat.): 8 "Hexadezimal" kommt von hexa decem (lat.): 16 Computer-Systeme WS 12/13 Teil 4/Datentypen 24 12
Wie sieht es in Java aus? I public static String int2string(int value, int base) { char numerals[]= {'0','1','2','3','4','5','6','7','8', '9','A','B','C','D','E','F'}; char bits[]= new char[32]; int bitind= 0; String result= ""; int val= value; do { bits[bitind++]= numerals[val % base]; val= val/base; } while(val>0); while(--bitind>=0) { result= result+bits[bitind]; } return result; } Computer-Systeme WS 12/13 Teil 4/Datentypen 25 Wie sieht es in Java aus? II public static void main(string[] args) { for(int i=0; i<22; i++) { System.out.printf("int = %5s ",int2string(i,2)); System.out.printf("int = %5s ",int2string(i,8)); System.out.printf("int = %5s \n",int2string(i,16)); } } int = 0 int = 0 int = 0 int = 1 int = 1 int = 1 int = 10 int = 2 int = 2 int = 11 int = 3 int = 3 int = 100 int = 4 int = 4 int = 101 int = 5 int = 5 int = 110 int = 6 int = 6 int = 111 int = 7 int = 7 int = 1000 int = 10 int = 8 int = 1001 int = 11 int = 9 int = 1010 int = 12 int = A int = 1011 int = 13 int = B int = 1100 int = 14 int = C int = 1101 int = 15 int = D int = 1110 int = 16 int = E int = 1111 int = 17 int = F int = 10000 int = 20 int = 10 int = 10001 int = 21 int = 11 int = 10010 int = 22 int = 12 int = 10011 int = 23 int = 13 int = 10100 int = 24 int = 14 int = 10101 int = 25 int = 15 Computer-Systeme WS 12/13 Teil 4/Datentypen 26 13
Algorithmus: Binär nach Oktal Umrechnung von Binär nach Oktal erfolgt durch Zusammenfassen von jeweils 3 Bits: Oktal 0 0 0 -> 0 0 0 1 -> 1 0 1 0 -> 2 0 1 1 -> 3 1 0 0 -> 4 1 0 1 -> 5 1 1 0 -> 6 1 1 1 -> 7 100101010110101110 (binär) 100.101.010.110.101.110 4 5 2 6 5 6 (oktal) Computer-Systeme WS 12/13 Teil 4/Datentypen 27 Algorithmus: Binär nach Hexadezimal Umrechnung von Binär nach Hexadezimal erfolgt durch Zusammenfassen von jeweils 4 Bits: Hexadezimal 0 0 0 0 -> 0 0 0 0 1 -> 1 0 0 1 0 -> 2 0 0 1 1 -> 3 0 1 0 0 -> 4 0 1 0 1 -> 5 0 1 1 0 -> 6 0 1 1 1 -> 7 1 0 0 0 -> 8 1 0 0 1 -> 9 1 0 1 0 -> A 1 0 1 1 -> B 1 1 0 0 -> C 1 1 0 1 -> D 1 1 1 0 -> E 1 1 1 1 -> F 100101010110101110 (binär) 10.0101.0101.1010.1110 2 5 5 A E (hexadezimal) Computer-Systeme WS 12/13 Teil 4/Datentypen 28 14
Algorithmus: Binär nach Dezimal I Bei dieser Umrechnung wird das Polynom ausgerechnet: 11110111011 nach Dezimal: 1979 1 1 1 1 0 1 1 1 0 1 1 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 Stellenwertigkeit 1*2 10 +1*2 9 +1*2 8 +1*2 7 +0*2 6 +1*2 5 +1*2 4 +1*2 3 +0*2 2 +1*2 1 +1*2 0 1*1024 +1*512 +1*256 +1*128 +0*64 +1*32 +1*16 +1*8 +0*4 +1*2 +1*1 = 1979 Computer-Systeme WS 12/13 Teil 4/Datentypen 29 Algorithmus: Binär nach Dezimal II (1) Bk:= Lies_Kette_ein (2) Summe:= 0 (3) Potenz:= 0 (4) WHILE Bk_ist_nicht_leer DO (5) K:= Letztes_Bit_aus_Bk (6) Summe:= Summe+K*2**Potenz (7) Entferne_Letztes_Bit_aus_Bk (8) Potenz:= Potenz+1 (9) OD (10) Gib_aus(Summe) Computer-Systeme WS 12/13 Teil 4/Datentypen 30 15
Addition 0000 0000 0000 0111 (7) + 0000 0000 0000 0110 (6) 0000 0000 0000 1100 Übertrag 0000 0000 0000 1101 (13) Die Regeln der binären Addition sind dieselben wie bei der "normalen" Addition, einschließlich des Übertrags/Überlaufs (oder carry). Computer-Systeme WS 12/13 Teil 4/Datentypen 31 Subtraktion durch Komplementbildung Komplement = Der Wert einer Zahl wird übereinstimmend mit der Codierung mit -1 multipliziert 1er-Komplement = Eine ganze Zahl wird dadurch negiert, dass alle Bits logisch negiert werden. 2er-Komplement = Eine ganze Zahl wird dadurch negiert, dass alle Bits logisch negiert werden und dass dann eine 1 addiert wird. Dadurch wird die Subtraktion auf die Addition des negativen Werts zurückgeführt: a-b <=> a+(-b). Damit sind - wenn auch sehr ineffizient - alle vier Grundrechenarten für ganze Zahlen realisierbar. Computer-Systeme WS 12/13 Teil 4/Datentypen 32 16
Codierung negativer ganzer Zahlen 1er-Komplement Vorzeichen 2er-Komplement Vorzeichen Größte positive Zahl +3 +2 +1 Null Null -1-2 -3 Größte negative Zahl 0111 1111... 0000 0011 0000 0010 0000 0001 0000 0000 1111 1111 1111 1110 1111 1101 1111 1100... 1000 0000 Größte positive Zahl 1er+1 +3 +2 +1 Null -1-2 -3-4 Größte negative Zahl 0111 1111... 0000 0011 0000 0010 0000 0001 0000 0000 1111 1111 1111 1110 1111 1101 1111 1100... 1000 0000 Computer-Systeme WS 12/13 Teil 4/Datentypen 33 Bemerkungen Es gibt hierbei kein Vorzeichenbit, das getrennt von der Zahl betrachtet wird, sondern das vorderste Bit zeigt neben seinem Wert auch das Vorzeichen an. Binärzahlen mit endlich vielen Stellen haben nur einen bestimmten Wertebereich, innerhalb dessen ein Wert kodiert werden kann und daher gültig ist. Wird versucht, z. B. durch Addition von 1 auf den größten Wert bzw. Subtraktion von 1 vom kleinsten Wert eine größere als darstellbare Zahl zu berechnen, findet ein Überlauf (Overflow) statt. Das Signal dazu wird carry genannt. In diesem Fall ist das Ergebnis falsch. Computer-Systeme WS 12/13 Teil 4/Datentypen 34 17
Addition/Subtraktion mit 2er-Komplement Addition 0000 0000 0000 0111 (7) + 0000 0000 0000 0110 (6) 0000 0000 0000 1100 Übertrag 0000 0000 0000 1101 (13) Subtraktion 0000 0000 0000 0111 (7) + 1111 1111 1111 1010 (-6) 1 1111 1111 1111 1100 Übertrag 0000 0000 0000 0001 (1) Bilden des 2er-Komplements: (1) 1er-Komplement durch Negation (2) Addition von 1 Die Regeln der binären Addition sind dieselben wie bei der "normalen" Addition, einschließlich des Überlaufs. Computer-Systeme WS 12/13 Teil 4/Datentypen 35 Operationen Analog dazu gibt es Algorithmen für Subtraktion Multiplikation Division Bitweise logische Operationen: Und-Verknüpfung Oder-Verknüpfung Negation Shift (Verschieben um 1 Bit) Computer-Systeme WS 12/13 Teil 4/Datentypen 36 18
Zahlenbereiche I Da die interne Zahlendarstellung nur endlich viel Platz haben kann, lassen sich nicht "mathematische Objekte" wie die natürlichen oder rationalen Zahlen darstellen, sondern nur Näherungen, deren Werte sich nur im Rahmen festgelegter Bereiche bewegen. Dies gilt nicht nur für die Grenzwerte (Maxima, Minima), sondern auch für bestimmte Zahlen, z. B. 1/3 kann nur mit 0,3333300.. genähert dargestellt werden. Diese Ungenauigkeiten haben die Konsequenz, dass nicht die üblichen mathematischen Regeln gelten, insbesondere ist die Gleichheit und Subtraktion problematisch. Computer-Systeme WS 12/13 Teil 4/Datentypen 37 Zahlenbereiche II Mit Vorzeichen: Größe 8 bit 16 bit 32 bit 64 bit Dezimalbereiche -128..127-32.768..32767-2147483648..2147483647 (ca. -2*10 9..2*10 9 ) -9223372036854775808..9223372036854775807 (ca. -9*10 18..9*10 18 ) Ohne Vorzeichen: Größe 8 bit 16 bit Dezimalbereiche 0..255 (2 8-1) 0..65535 (2 16-1) Computer-Systeme WS 12/13 Teil 4/Datentypen 38 19
Darstellung der Rationalen Zahlen I Festpunktzahlen/Festkommazahlen: Es wird eine bestimmte Bitanzahl für den Wert vor und dem nach dem Komma festgelegt: MSB N Bit LSB 0 Bitnummer Vorzeichenbit Binärzahl vor dem Komma (gedachte) Position des Kommas Binärzahl nach dem Komma MSB = Most Significant Bit (Höchstwertigstes Bit) LSB = Least Significant Bit (Niederwertigstes Bit) Zahl= a n *B n + a n-1 *B n-1 +.. + a 1 *B 1 +a 0 *B 0 +a -1 *B -1 +a -2 *B -2 +.. +a -m *B -m Computer-Systeme WS 12/13 Teil 4/Datentypen 39 Algorithmus: Dezimal nach Binär I Es wird immer mit der höchst möglichen 2er-Potenz subtrahiert und mit dem Rest weiter gearbeitet. Dies ist nur dann möglich, wenn die 2er-Potenz kleiner als die Zwischensumme ist. Gelingt dies, ist die Ziffer eine 1, sonst 0. Mit jedem Schritt wird die 2er-Potenz um 1 erniedrigt. 13,75 : 8 = 1 Rest 5,75 5,75 : 4 = 1 Rest 1,75 1,75 : 2 = 0 Rest 1,75 1,75 : 1 = 1 Rest 0,75 0,75 : 0,5 = 1 Rest 0,25 0,25 : 0,25 = 1 Rest 0,00 Leserichtung Ergebnis: 13,75 (Dezimal) ist 1101,11 (Binär) Computer-Systeme WS 12/13 Teil 4/Datentypen 40 20
Algorithmus: Dezimal nach Binär II Eine exakte Umrechnung ist nicht immer möglich, wie das folgende Beispiel zeigt. Dann muss gerundet werden. Das angegebene Verfahren eignet sich auch nicht zum Erkennen von Perioden... 0,8 : 0,5 = 1 Rest 0,3 0,3 : 0,25 = 1 Rest 0,05 0,05 : 0,125 = 0 Rest 0,05 0,05 : 0,0625 = 0 Rest 0,05 0,05 : 0,03125 = 1 Rest 0,01875 0,01875 : 0,015625 = 1 Rest 0,003125 0,003125 : 0,0078125 = 0 Rest 0,003125 0,003125 : 0,00390625 = 0 Rest 0,003125 0,003125 : 0,001953125= 1 Rest... Korrektes Ergebnis: 0.1100 Computer-Systeme WS 12/13 Teil 4/Datentypen 41 Algorithmus: Binär nach Dezimal 1101,101 nach Dezimal: 13,625 1 1 0 1 1 0 1 2 3 2 2 2 1 2 0 2-1 2-2 2-3 Stellenwertigkeit 1*2 3 +1*2 2 +0*2 1 +1*2 0 +1*2-1 +0*2-2 +1*2-3 1*8 +1*4 + 0*2 +1*1 +1*0,5 +0*25 +1*0,125 = 13,625 Dieses Verfahren arbeitet analog zu dem Fall mit ganzen Zahlen. Computer-Systeme WS 12/13 Teil 4/Datentypen 42 21
Darstellung der Rationalen Zahlen II Gleitpunktzahlen/Gleitkommazahlen: Es wird eine bestimmte Bitanzahl für den Wert (Mantisse) sowie ein Faktor (Exponent) festgelegt: Zahl = (-1) vor *(1+mantisse) *2 exp-offset Einfache Genauigkeit (32 bit) 1 8 23 Breite in bit vor exp mantisse Offset = 127 0<= mantisse<1 Computer-Systeme WS 12/13 Teil 4/Datentypen 43 Darstellung der Rationalen Zahlen III Mantisse = Zahl mit einer gedachten Kommaposition Exponent = Teil des Faktors in Bezug auf eine Basis Normalisieren = Umformen der Zahl in eine eindeutige Darstellung Zahl = Mantisse * B Exponent Mantisse = x,xxxxxxx... Darstellung derselben Zahl: 110.110011 E 100 11.0110011 E 101 1.10110011 E 110 0.110110011 E 111 0.0110110011 E 1000 Intern steht das Komma immer an derselben Position Normalisiert (jeweils nach anderen Konventionen) Computer-Systeme WS 12/13 Teil 4/Datentypen 44 22
Darstellung von Rationalen Zahlen IV Der Exponent kann als Zahlenwert noch eine Basis (Offset) haben, zu der er relativ gemeint ist, d.h. von dem im Speicher liegenden Wert muss der Offset subtrahiert werden, um den tatsächlichen Wert zu erhalten. Das spart das Vorzeichen-Bit im Exponenten, da alle Werte dadurch positiv sind. Heutige Prozessoren realisieren Gleitpunktarithmetik (Gleitkommaarithmetik, Floating Point) nach der Norm IEEE 754. Computer-Systeme WS 12/13 Teil 4/Datentypen 45 IEEE 754 Norm von 1985, die die Repräsentation der Fließpunktzahlen (Floating Point) definiert. Genauigkeit: Da die mathematischen Zahlen exakt sind und da intern nur endlich viele Bits zur Verfügung stehen, können nur in bestimmten Fällen Zahlen exakt dargestellt werden. In den anderen Fällen wird mit Näherungen gearbeitet. Dies bezieht sich auch auf das Rechnen, das so ungeschickt durchgeführt werden kann, dass die Ergebnisse problematisch sind. Das Gebiet, das sich mit diesen Problemen beschäftigt, ist die Numerische Mathematik. Es gibt 3 Größen von Genauigkeit, wobei hier nur zwei (32 und 64 bit) besprochen werden (die Dritte ist 80 bit). Computer-Systeme WS 12/13 Teil 4/Datentypen 46 23
Zahlendarstellung nach IEEE 754 Zahl = (-1) vor *(1+mantisse) *2 exp-offset Einfache Genauigkeit (32 bit) 1 8 23 Breite in bit vor exp mantisse Offset = 127 0<= mantisse<1 Wertebereich ca. 1,18*10-38 bis 3,4*10 38 Genauigkeit 24 bit Doppelte Genauigkeit (64 bit) 1 11 52 Breite in bit vor exp mantisse Offset = 1023 0<= mantisse<1 Wertebereich ca. 2,23*10-308 bis 1,79*10 308 Genauigkeit 53 bit Computer-Systeme WS 12/13 Teil 4/Datentypen 47 Bemerkungen Per Konvention wird die Mantisse so normalisiert, dass vor dem gedachten Komma immer eine 1 steht, also aus z. B. 11.0110011 E 101 wird 1.10110011 E 110 gemacht. Um Bits zu sparen, wird dieses Bit weggelassen, d.h. es wird 10110011 als Mantisse abgelegt. Das Vorzeichenbit ist nicht Bestandteil der Mantisse, so dass diese als Absolutwert angesehen werden kann. Auf den Exponentenwert wird der Offset addiert, so dass für 32 bit aus dem negativsten Exponenten (-126) 1 wird und aus dem positivsten (127) 254 wird. Die Werte 0 und 255 für den Exponenten haben eine Sonderbedeutung. Computer-Systeme WS 12/13 Teil 4/Datentypen 48 24
Nach dieser Anstrengung etwas Entspannung... Computer-Systeme WS 12/13 Teil 4/Datentypen 49 25