FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Technische Informatik

T1/2 Klausurvorbereitungsfragen

T1/2 Klausurvorbereitungsfragen 2005-07-25 20:04
Anonymer User
Hallo !

Ich hänge gerade in den Übungen zu T1/T2 um mich wie wohl eiinige andere auf die Klausurr vorzubereiten und stolper mal wieder über etwas, wo ich gerade keine vernünftige antwort drauf finden kann.

T1-Ü Blatt 1 Aufgabe 1.6c)

Komplementdarstellung von K2(1,111)zur basis 2

in der Musterlösung kommt dabei (0,001) zur basis 2 raus -> wieso denn bloß ?!

als rechenweg wird angegeben (2 hoch 1) zur basis 10 - (1,111) zur basis 2 -> aber wieso soll das nu (0,001) ergeben ?!

weder skript noch wiki konnten mir so wirklich helfen - subtrachieren unter verwendung des komplements verstehe ich hingegen …

hilfe :(

Re: T1/2 Klausurvorbereitungsfragen 2005-07-25 20:15
UncleOwen
Erstmal sollte man feststellen, dass es hier anscheinend ums 2er-Komplement geht; es gibt noch das 1er-Komplement. Für die Berechnung des 2er-Komplements gibt es 2 Rechenwege:

1. (Der aus der Musterlösung): 10,000 - 1,111 ------- 0,001
2. Bilde das 1er-Komplement, und addiere an der letzten Stelle 1:
1er Komplement zu 1,111 ist 0,000, addiere 0,001. Ergebnis: 0,001.

Re: T1/2 Klausurvorbereitungsfragen 2005-07-25 21:34
Fred
Was ist überhaupt das Zweierkomplement? Wofür braucht man es?

Das Zweierkomplement ist eine von vielen Möglichkeiten, positive und negative Zahlen darzustellen und rechnerische Operationen auf ihnen auszuführen (die Addition im Einerkomplement ist z.B. komplizierter als im Zweierkomplement).

Wie deute ich eine Zahl, die im Zweierkomplement dargestellt ist?

Das höchstwertige Bit speichert das Vorzeichen. Eine 0 bedeutet positiv, eine 1 bedeutet negativ. Bei einer positiven Zahl lässt sich der Betrag der Zahl direkt aus den anderen Bits ablesen:

01100001 = 97

Ist das Vorzeichen negativ (das höchstwertige Bit also 1), dann kann man den Betrag der Zahl nicht mehr so ohne weiteres erkennen, sondern man muss alle Bits invertieren und anschliessend 1 draufaddieren:

11100001 (ursprüngliche Zahl)
00011110 (alle Bits invertiert)
00011111 (1 draufaddiert)
= 31

11100001 steht also für -31.

Was man aus diesem Beispiel auch erkennen sollte ist die Tatsache, dass man eine Zahl im Zweierkomplement nicht einfach negieren kann, indem man das Vorzeichenbit umdreht.

Wie stelle ich eine Zahl im Zweierkomplement dar?

Positive Zahlen (Beispiel: 52) kann man wieder "einfach so" speichern.

52 = 00110100

Negative Zahlen (Beispiel: -52): Man betrachtet den Betrag der Zahl, invertiert alle Bits und addiert anschliessend 1 drauf:

00110100 (52)
11001011 (alle Bits invertiert)
11001100 (1 draufaddiert)

Also -52 = 11001100

Wir können auch nochmal Checken, ob wir uns nicht verrechnet haben. Dazu addieren wir einfach 52 und -52 und schauen mal, ob auch wirklich 0 dabei herauskommt:
00110100 (52) + 11001100 (-52) 111111 (Überträge) -------- 00000000
Jetzt kann man natürlich auch auf die Idee kommen, eine Zahl zu negieren, indem man sie von 0 abzieht, da 0-x = -x (oh Wunder).

0 (0) - 00110100 (52) 111111 (Überträge) -------- 11001100
Anstatt von 0 abzuziehen kann man auch von (2 hoch wortbreite) abziehen, weil das ebenfalls 0 ist (denn: alle darstellbaren bits sind 0) und das auf dem Papier vielleicht schöner aussieht, da man nicht mit "Unsichtbaren Nullen" zu kämpfen hat:

100000000 (256) - 00110100 (52) 111111 (Überträge) -------- 11001100
Ausserdem kann man die Subtraktion jetzt auch im Dezimalsystem durchführen, was vielleicht angenehmer weil gewohnt ist:

256 - 52 (Überträge) ----- 204 Und 204 ist binär 11001100, bingo.

Re: T1/2 Klausurvorbereitungsfragen 2005-07-25 21:55
Fred
Bischen älteres Geschreibsel von mir zum Thema Komplemente:
http://3773.rapidforum.com/topic=101885693754&startid=#188569375414362191

Um negative Zahlen darstellen zu koennen, gibt es drei Moeglichkeiten. Ich beschraenke mich hier der Einfachheit halber auf 16 Bit Zahlen.

a) Sign (1 Bit) getrennt vom Wert speichern, z.B. 0000000000001100 bin = 12 dez, 1000000000001100 bin = -12 dez. Der Wertebereich geht von -32767 bis +32767, die Null kommt doppelt vor (einmal positiv und einmal negativ). So gespeicherte Zahlen lassen sich (relativ) einfach multiplizieren und dividieren, Addition und Subtraktion ist dagegen aufwendig.

b) Einerkomplement: positive Zahlen werden wie gehabt gespeichert. Um eine negative Zahl zu speichern (z.B. -12), nimmt man einfach das Bitmuster des Wertes (12 dez = 0000000000001100 bin) und invertiert alle Bits (1111111111110011). Der Wertebereich ist der gleiche wie bei a), und auch hier erkennt man negative Zahlen am MSB (most significant Bit). Der Wert der Zahl ist aber jetzt nicht mehr so direkt fuer den Menschen sichtbar. Beim Einerkomplement ist die Addition nicht trivial: ein eventuell auftretender Ueberlauf muss nach der Addition zusaetzlich addiert werden. Beispiel:

_1111111111110011 = -12 _1111111111110010 = -13 CS--------------- 11111111111100101 ("Carry" ist in Bit 16) ________________1 ("Carry" addieren) ----------------- _1111111111100110 = -25
Das Ergebnis wurde wieder auf 16 Bit zurechtgeschnibbelt, d.h. das "Carry" geloescht. Was man sofort sieht ist, dass das Ergebnis negativ ist (MSB = 1). Um nun das Ergebnis zu ueberpruefen, invertieren wir die Bits wieder: 1111111111100110 bin ^ 1111111111111111 bin = 0000000000011001 bin = 25 dez. Stimmt also!


c) Zweierkomplement: positive Zahlen wie gehabt, negative Zahlen in zwei Schritten ermittelbar: zuerst invertiert man alle Bits (d.h. man bildet das Einerkomplement), und anschliessend addiert man 1. Dann kann eine Addition "einfach so" durchgefuehrt werden. Das gleiche Beispiel mit -12 und -13 im Zweierkomplement:

_1111111111110100 = -12 _1111111111110011 = -13 CS--------------- 11111111111100111 (das Carry interessiert uns im Zweierkomplement nicht) ----------------- _1111111111100111 = -25
Um das Ergebnis zu checken (d.h. aus dem offensichtlich negativen Ergebnis den Wert zu lesen), bilden wir erneut das Zweierkomplement: 1111111111100111 -> 0000000000011000 -> 0000000000011001 = 25

Re: T1/2 Klausurvorbereitungsfragen 2005-07-25 23:42
Anonymer User
hey danke leute ! hat sehr geholfen - weiß auch nicht … irgendwie ja simpel, aber ich stand gerad voll aufm schlauch :)


Re: T1/2 Klausurvorbereitungsfragen 2005-07-26 09:56
Zaphod
Ähm, hier soll eigentlich ein Zeilenumbruch rein, klappt aber nicht.
Kannst du den nicht mit CODE erzwingen, wenn er nicht freiwillig
will? [img]http://www.fb18.de/gfx/22.gif[/img]

Re: T1/2 Klausurvorbereitungsfragen 2005-07-26 13:39
Fred
Ähm, hier soll eigentlich ein Zeilenumbruch rein, klappt aber nicht.
Kannst du den nicht mit CODE erzwingen
Ist zwar ein ziemlich hässlicher Hack, aber besser als nichts. Danke.

Re: T1/2 Klausurvorbereitungsfragen 2005-07-30 18:59
kljgfwe
Eine andere Klausurvorbereitungsfrage…

Mir ist da eine Kleinigkeit aufgefallen:
Und zwar geht es um statische Hazards:
Manche Quellen sagen ein 1-Hazard sei ein Hazard bei dem eine 0 kommt, statt der gewünschten 1, und ein 0-Hazard läge vor, wenn eine 1 kommt, statt der erwarteten 0.
Die andere Quelle beschreibt das genau andersherum.
Was stimmt? :)