Komplementbildung

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Komplementbildung
zB Klausur vom 15.04.99 Aufgabe 3 b) iii)

2133 ist eine Zahl im 5er System als Komplement aufgeschrieben, was ist ihr Wert?

Hat mir da vielleicht jemand eine Formel für? (Basis hoch darstellbare Ziffern) - K haut da irgendwie nicht hin.


Die Formel ist

((B[SUP]n[/SUP]-1)-N)+1

wenn B die Basis, n die Anzahl der bits und N die zu komplementierende Zahl ist.
Nach dieser Formel kann man zu einer Zahl N das Zweierkompeiment berechnen. Für den umgekehrten Weg muss man sie dann halt entsprechend umformen (oder so… :smiley: )

Das Einserkomplement zu einer Zahl N erhälst du, indem du die 1 hinten NICHT dazuzählst, also mit der Formel

(B[SUP]n[/SUP]-1)-N


ich glaub, da die “mitte” des 5er-raums irgendwo bei 2222 liegt, ist diese zahl (2133) positiv (weil in der 1. hälfte). also braucht man sich um ein eventuelles minus keine gedanken zu machen und kann direkt ins 10er-system umrechnen. kommt dann 293 raus (powered by php baseconverter :wink:


Yves du bist mein Gott, genau dass hatte ich nämlich vermutet, war mir aber nicht ganz sicher. Man könnte also als Formel ((B hoch n) / 2)-Z für Zahlen die grösser als B hoch N halbe sind nehmen, oder?

Im Binärsystem ist das eh supereasy, einfach minus 1 und dann invertieren.


Ähm… was?

Naja, ich hab halt einfach mal angenommen, dass B-komplementierte Werte immer in der 2. Hälfte des verfügbaren Zahlenbereichs liegen. Das ergibt sich aus der o.g. Formel. Und da das hier eben nicht der Fall ist, kann man sich jede Berechnerei sparen. Wäre die Zahl jetzt z.B. 3221sub[/sub], müsste man natürlich erstmal das logische Minus entfernen:
K’ = 5[sup]4[/sup]sub[/sub] - 1 + 3211sub[/sub] + 1
und bekäme dann
K’ = ??? (faul sei)
muss das dann noch ins 10er umrechnen und wieder ein Minus davorschreiben, fertig.
Alles natürlich unter der Annahme, dass du nur 4 Stellen hast. Hättest du 5 oder mehr, wäre die erste ja wieder eine 0 und die Zahl (hier 03221) läge noch in der 1. Hälfte und wäre positiv. OK?


Oder Du invertierst zuerst und ADDIERST dann die 1… das is dann (fast) noch einfacher… :-p


was ist denn ein einserkomplement und was ist sein unterschied zu einem zweierkomplement (= b-komplement?)?


Das 1-Komplement (oder B-1-Komplement) ist einfach nur die Invertierung des Werts. Ohne das anschließende +1 also.

Unterschiede:

  • Keine +1 Addition
  • Zwei Codierungen für die Null (0 und -0)
  • Deshalb auch eine negative Zahl weniger darstellbar
  • Immer noch unterschiedliche Verfahren zur Addition/Subtraktion nötig (mit dem B-Kompl. kannst du die neg. Zahlen einfach addieren, siehe diesen schönen Kreis im Skript, Kap. 5.2 glaub ich)

hmm …
wo steht denn soetwas? davon hab ich irgendwie noch nie was gehoert. der beschreibung nach koennte man dann aber gleich einfach nur ein vorzeichenbit einfuehren, oder?

aber nochmal zu der aufgabe 3biv) 3000 (5) ins 10er

wir haben das so gemacht:

  1. 5^4=625 zahlen darstellbar, davon positiv bis 312 (deshalb ist die zahl aus der iii = 293 positiv), negativ ab 313 bis 625.
    ==> 3000 (5) = 375 (10) ist negativ

  2. k = ((b^n - z) - 1) + 1 umgestellt:
    z = b^n - k;
    z = 625 - 375 = 250.

  3. verbinden: negativ und 250 gleich -250 als ergebnis. stimmt das?


nein, das wäre kein komplement, sondern nur ein “vorzeichen mit betrag”. siehe skript, kap. 5.2 (seite 5-4).

dann hättest du ja so einen zahlenstrahl:
0 1 2 3 -0 -1 -2 -3
[COLOR=#999999]--------> <------------- (ziemlich durcheinander)[/COLOR]

mit dem [COLOR=red]2[/COLOR]-komplement kommt folgendes raus:
0 1 2 3 -4 -3 -2 -1
[COLOR=#999999]--------> ------------->[/COLOR]
und wie du siehst, kommst du automatisch links wieder rein, falls du rechts rausfliegst. also -2 + 3 = 1.

[quote]
aber nochmal zu der aufgabe 3biv) 3000 (5) ins 10er

(…)[/QUOTE]

hätt ich jetzt auch so gemacht, ja


Ich habe diese Aufgabe so gelöst:

  1. 2133(5) + 3000(5) = 133(5) → 43(10)
  2. 293(10) + x(10) = 43(10)

→ 3000(5) = x(10) = -250