Title | Hausaufgabe 11 loesung WiSe 2018/2019 |
---|---|
Course | Einführung in die Informatik |
Institution | Technische Universität Berlin |
Pages | 16 |
File Size | 353.6 KB |
File Type | |
Total Downloads | 51 |
Total Views | 127 |
Download Hausaufgabe 11 loesung WiSe 2018/2019 PDF
Einführung in die Informatik - WS 2018/19 Technische Universität Berlin
Neuronale Informationsverarbeitung
Übungsblatt 11 (Block 3) Prof. Dr. Klaus Obermayer und Mitarbeiter Zweierkomplement
Verfügbar ab: Abgabe bis:
14.01.19 21.01.19-25.01.19
Aufgabe 1: Zweierkomplement-Darstellung
2 Punkte
a) Welchen Bereich deckt eine 5-Bit-Dualzahl ab? b) Welchen Bereich deckt ein 6-Bit-Zweierkomplement ab? c) Vervollständigen Sie die nachfolgende Tabelle. Zahl zur Basis 10 0 -4 -2
Zweierkomplement (4 Bit)
1001 1010 0101
Musterlösung: a) Welchen Bereich deckt eine 5-Bit-Dualzahl ab? [0,1,...,31] b) Welchen Bereich deckt ein 6-Bit-Zweierkomplement ab? [-32,-31,...,31] c) Vervollständigen sie die nachfolgende Tabelle. Zahl zur Basis 10 0 -4 -2 -7 -6 5
Zweierkomplement (4 Bit) 0000 1100 1110 1001 1010 0101
Aufgabe 2: Rechnen im Zweierkomplement
3 Punkte
Führen Sie die nachfolgenden Operationen in 4 Bit unter Verwendung eines zusätzlichen Checkbits aus, um Bereichsüberschreitungen festzustellen. Wandeln Sie dazu die Zahlen ins Zweierkomplement um und berechnen
weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110
1
InfTech
WS 2018/19
Übungsblatt 11 (Block 3)
Sie in dieser Darstellung die Ergebnisse. Geben Sie an, ob (und wenn ja, wo) ein Über- bzw. Unterlauf entsteht. (i) 3(10) + (6(10) + 3(10)) (ii) (−3(10)) − 4(10) + (−5(10)) Hinweis: Der Lösungsweg muss erkennbar sein!
Musterlösung: (i) 6(10): 0 0110(2 K ) + 3(10): 0 0011(2 K ) Überlauf −7(10): 0 1001(2 K ) 3(10): 0 0011(2 K ) + (−7)(10): 1 1001(2 K ) −4(10): 1 1100(2 K ) (ii)
−3(10): 1 1101(2 K ) − 4(10): 0 0100(2 K ) −7(10): 1 1001(2 K ) −7(10): 1 1001(2 K ) + (−5)(10): 1 1011(2 K ) Unterlauf 4(10): 1 0100(2 K ) Nur Java Aufgabe 3: Zweierkomplement-Rechner
5 Punkte
In dieser Aufgabe soll die Klasse ZKZahl vervollständigt werden. Die Klasse ZKZahl soll der Speicherung eines 32-Bit Zweierkomplements dienen und enthält das Attribut zk, welches vom Typ boolean-Array ist und eine Zahl in Zweierkomplementdarstellung (mit 32 Stellen) repräsentiert. Eine 1 ist als true, eine 0 als false zu interpretieren. Hinweis: Anders als letzte Woche steht 20 im Array an der Stelle mit dem Index 0, 21 an der mit dem Index 1 usw. Implementieren Sie (nicht unbedingt in dieser Reihenfolge): • Die public-Methode intToBoolArrayZK, welche eine int-Zahl entgegennimmt und die entsprechende Repräsentation als boolean-Array (im oben beschriebenen Format) zurückgibt. • Zwei parametrisierte Konstruktoren (ebenfalls public). Der eine soll einen int, der andere einen booleanArray (mit einer gültigen Zweierkomplementzahl im oben beschriebenen Format) übergeben bekommen. • Die public-Methode addiere, welche zwei Objekte vom Typ ZKZahl entgegennimmt und die Summe der beiden Zahlen als ZKZahl-Objekt zurückgibt. Setzen Sie die Addition mit Hilfe des boolean-Arrays und den Ihnen bekannten booleschen Operatoren um. Verwenden Sie ein Checkbit, um zu prüfen ob ein Über- bzw. Unterlauf stattgefunden hat und geben Sie, falls nötig, eine entsprechende Warnung aus. • Die private-Methode wechselVorzeichen(), welche nur das Vorzeichen der Zahl (nicht aber deren Betrag) ändert. • Testen Sie Ihre Implementierung mit der Klasse Taschenrechner.java aus den Vorgaben. • Beispielausgabe: ********************************************************* ********* Teilfunktionsfaehiger Taschenrechner **********
weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110
2
InfTech
WS 2018/19
Übungsblatt 11 (Block 3)
********************************************************* Bitte geben Sie die erste Dezimalzahl ein: 3 Bitte geben Sie die zweite Dezimalzahl ein: 4 Umwandlung der Zahlen von Dezimal- in Zweierkomplementdarstellung Bitte geben Sie an, welche Operation Sie durchfuehren wollen (+/-): [00000000000000000000000000000011]_(ZK) (dezimal: 3) -[00000000000000000000000000000100]_(ZK) (dezimal: 4) =[11111111111111111111111111111111]_(ZK) (dezimal: -1) 1 public class ZKZahl { 2 private boolean[] zk; 3 4 // Konstruktoren 5 6 public ZKZahl(int integerNumber) { 7 // TODO 8 } 9 10 public ZKZahl(boolean[] zk) { 11 // TODO 12 } 13 // Methoden 14 15 // Wechselt das Vorzeichen der Zahl 16 17 private void wechselVorzeichen() { 18 // TODO 19 } 20 21 public String toString() { 22 String resString = ""; 23 for(int i = zk.length−1; i>=0; i−−) { 24 if(zk[i]) { 25 resString += "1"; 26 } else { 27 resString +="0"; 28 } 29 } return resString; 30 31 } 32 33 // Addiert zwei ZKZahlen und gibt das Ergebnis in Form eines neu erzeugten ZKZahl−Objektes zurueck 34 public ZKZahl addiere(ZKZahl zk1, ZKZahl zk2) { 35 // TODO 36 } 37 38 // Subtrahiert (unter Verwendung der obigen Additions−Methode) eine ZKZahl von einer anderen und gibt das Ergebnis als ZKZahl zurueck 39 public ZKZahl subtrahiere(ZKZahl zk1, ZKZahl zk2) { 40 zk2 = new ZKZahl(zk2.getBoolArrayZK()); 41 zk2.wechselVorzeichen(); 42 return addiere(zk1,zk2); 43 } 44 // Hilfsmethode zur Umwandlung eines (eine ZK−Zahl repraesentierenden) 45
weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110
3
InfTech
WS 2018/19
Übungsblatt 11 (Block 3)
boolean−Arrays zu einem int−Wert public int boolArrayZKToInt(boolean[] zk) { int result = 0; for(int i = 0; i...