Hi, hat von euch schon mal jemand 2 Binärzahlen im Einerkomplement multipliziert? Ich bin wohl zu blöd dafür ;-). Kann mir jmd einen Tipp geben, bzw. einen Link? bsp 7 also 0111 * -3 also 100 ergibt nach meiner rechnung 011100 (nach links shiften, also 2 0en anhängen) was so gar nichts mit dem gewünschten ergebniss von 101010 (1+4+16, 0er zählen) zu tun hat. Was mach ich falsch? Positiv und im 2er Komplement gibt es keine Probleme. Mfg
- 3 -> 1111 1101 7 -> 0000 0111 * ----------------- -21 -> 1110 1001 =================
Danke, aber du rechnest im 2er Komplement. Probeme treten nur im wohl weniger verbreitetem Einerkomplement auf.
Zu blöd schrieb: > Danke, aber du rechnest im 2er Komplement. Probeme treten nur im wohl > weniger verbreitetem Einerkomplement auf. Eben deswegen wird das 2er Komplement benutzt. Weil man da einfach rechnen kann. Im 1er komplement geht das nicht.
Zu blöd schrieb: > Positiv und im 2er Komplement gibt es keine Probleme. Dein Problem ist: im Einerkomplement gibt es schon 2 Nullen. z.B. für 8 Bit 0 = 00000000 und -0 = 11111111 Und wenns da schon klemmt, wie wird es dann wohl mit den anderen Zahlen weitergehen?
Ich vermute, dass jemand kreativ genug war, eine Hausaufgabe zu stellen, für die man nicht an jeder Strassenecke einen Javascript-Rechner findet. Der in der Branche recht bekannt Seymour Cray fand das Einerkomplement offenbar ganz praktisch. Eine Begründung dafür ist mir aber noch nicht begegnet.
Zahlenbreite 4 Bit. - 3 1100 7 0111 * --------------- 84 101 0100 >> >> --------------- 21 1 0101 ===============
Irgendwie steh ich auf dem Schlauch. Wie rechnet ihr da die Multiplikation? Ich kenn das eigentlich nur so, dass man zu Beginn einer Multiplikation erst mal alle beiden Teilnehmer positiv macht und sich merkt ob einer oder alle beide Position waren. Das geht ganz einfach, weil man einfach nur ein 'Eregebnis muss negativ sein Bit' toggeln muss. Dann wird mit den positiven Zahlen multipliziert und zum Schluss das Ergebnis möglicherweise noch negiert. Aber diese 'Zusammenfassung der Multiplikationen' die bisher präsentiert wurden, die erinnern mich an die Mathematik Texte des Altertums, bei denen man auch mehr zwischen den Zeilen lesen muss als man sie verstehen kann.
... Mathematik Texte des Altertums ... Wir sind eben große Verehrer des Muhammad ibn Musa, Abu Dscha'far al-Chwarizmi :)
Martin schrieb: > Das ist ja der Witz an der Rechnung ;) Der Witz ist zu gut versteckt, ich finde ihn nicht... :-/ Erklär mir das mal mit 8 Bit: 1111 1100 | -3 * 0000 0111 | * 7 = 0110 1101 0100 0100 | Und wie komme ich jetzt von dem Ergebnis auf 1111 1111 1110 1010 = -21 (Einerkomplement) oder gar 0000 0000 0001 0101 = 21
A. K. schrieb: > Ich vermute, dass jemand kreativ genug war, eine Hausaufgabe zu stellen, > für die man nicht an jeder Strassenecke einen Javascript-Rechner findet. so in die Richtung. aber auch keine Erklärungen
... Erklär mir das mal mit 8 Bit: ... Zahlenbreite 8 Bit. - 3 1111 1100 7 0000 0111 * ---------------------- 1764 110 1110 0100 21 1 0101 / ---------------------- 84 >> >> ---------------------- 21 1 0101 ======================
Martin schrieb: > - 3 1111 1100 > 7 0000 0111 > * > ---------------------- > 1764 110 1110 0100 Wie das? 252 * 7 = 1764. Soweit klar... Aber das sieht mir aus wie "am eigenen Haar aus dem Sumpf ziehen": > ---------------------- > 1764 110 1110 0100 > 21 1 0101 > / > ---------------------- > 84 Woher kommt jetzt hier "geteilt durch 21"?
... Woher kommt jetzt hier "geteilt durch 21"? ... Von deiner Forderung von 4- auf 8-Bit "umzusteigen".
Martin schrieb: > Von deiner Forderung von 4- auf 8-Bit "umzusteigen". Sorry aber das kapier ich nicht. Soll das heissen, daß Du abhängig von der Zahlenbreite eine Korrekturdivision und dann noch ein Shift brauchst? Kannst Du dann auch eine allgemeingültige Regel ableiten. Irgendwie gehts mir mindestens wie Karl Heinz. Alchemie im binären :-)
Karl heinz Buchegger schrieb: > Ich kenn das eigentlich nur so, dass man zu Beginn einer Multiplikation > erst mal alle beiden Teilnehmer positiv macht Mindestens bei der Zweierkomplementmultiplikation kannst du dir diesen Schritt sparen, bei richtiger Vorzeichenbehandlung der Teilprodukte ist das überflüssig. Erst recht wenn, wie in C, nur die untere Hälfte des Produkts verwendet wird - in dem Fall unterscheidet sich das Ergebnis bei Multiplikation mit und ohne Vorzeichen überhaupt nicht.
Was jeder hier hoffentlich weiss: Dass die Multiplikation nach dem allseits bekannten Schema der schriftlichen Multiplikation in jeder Basis und jeder Zahlendarstellung (im Stellenwertsystem natürlich - die Römer hatte damit mehr Ärger) gleich funktioniert. Egal ob binär oder dezimal, egal ob Einer- oder Zweierkomplement oder Sign/Magnitude (wie in der IEEE Fliesskommadarstellung). Man muss allerdings die Zwischenschritte auch entsprechend dieser Zahlendarstellung durchführen. Dabei kommen ja 2 verschiedene Teiloperationen vor: Die Multiplikation mit der Basis, also eine Verschiebung nach links, und die Addition. Beides sollte selbstverständlich im Einerkomplement durchgeführt werden - wo das in beiden Fällen ein bischen anders funktioniert als im Zweierkomplement. Womit von dieser Hausaufgabe erst einmal die Fragen zu lösen wären, wie Addition und Linksschiebeoperation im Einerkomplement funktionieren. Bischen was solltest du schon noch selber machen ;-).
... Alchemie im binären :-) ... Da ist so nicht korrekt. Es handelt sich eher um eine Mischung aus al-Chwarizmi & Nasir ad-Din.
Zu blöd schrieb: > Was mach ich falsch? Um festzustellen was du falsch machst müsste man erst einmal sehen was du überhaupt machst. Also solltest du schön fein säuberlich alle Zwischenschritte aufführen. Deine Prosa ist hoch dubios und manche ausgelassenen Selbstverständlichkeiten sind vielleicht keine.
> Positiv und im 2er Komplement gibt es keine Probleme.
Demnach würde ich einfach so vorgehen: wenn das MSB gesetzt ist, habe
ich eine negative Zahl. Die wird dann erst mal bitweise invertiert und
dann 2 positive Zahlen multipliziert. Ob das Ganze abschliessend nochmal
invertiert wird, entscheidet das XOR der beiden MSBs...
Wäre nur die Frage, ob man sich bei einer Hausaufgabe einen Gefallen tut, wenn man den casus cnactus der Frage derart schnöde umschifft. Andererseits machte es der Multiplier der CDC6600 ebenfalls so ;-).
Oder halt bei negativen Zahlen eins abziehen, um ins Zweierkomplement zu kommen, und dann wie gehabt...
A. K. schrieb: > Andererseits machte es der Multiplier der CDC6600 ebenfalls so ;-). Mann, hast du moderne Kisten!
Natürlich könnte man eine Wahrheitstabelle aufstellen und irgend ein Mintermverfahren anwenden... Ich finde es aber blöde, dass z.B. für 0011b * 0011b das selbe herauskommen muß wie für 1100b * 1100b (nämlich 1001) Oder (binär) 0110*0110 = 1001*1001 = 1100 (dez) 6 * 6 = -6 * -6 = 12 Das sieht schon auf den ersten Blick irgendwie aufwendig aus... :-o > Oder halt bei negativen Zahlen eins abziehen, um ins > Zweierkomplement zu kommen, und dann wie gehabt... Der Ansatz ist ähnlich pragmatisch wie meiner (eher noch brutaler): Erst wandeln ins Zweierkomplement, dann Rechnen, dann zurückwandeln...
Lothar Miller schrieb: > Natürlich könnte man eine Wahrheitstabelle aufstellen und irgend ein > Mintermverfahren anwenden... > Ich finde es aber blöde, dass z.B. für 0011b * 0011b > das selbe herauskommen muß wie für 1100b * 1100b (nämlich 1001) > > Oder (binär) 0110*0110 = 1001*1001 = 1100 > (dez) 6 * 6 = -6 * -6 = 12 Ähm. 6 * 6 ist aber 36
Klaus Wachtler schrieb: >> Andererseits machte es der Multiplier der CDC6600 ebenfalls so ;-). > > Mann, hast du moderne Kisten! So arg viel moderner wird's nicht, wenn du mal nach Hardware mit Rechung in Einerkomplement suchst. Dafür gibt's von der ein Buch, in dem der interne Aufbau ziemlich detailfreudig beschrieben ist. Zwar mit gewöhnungsbedürftiger Symbolik, aber für Freunde von Hardcore ziemlich interessant.
Lothar Miller schrieb: > Karl heinz Buchegger schrieb: >> Ähm. >> 6 * 6 ist aber 36 > Echt jetzt? Es ist schon spät... ;-) ... und du brauchst das Geld :-) (Allerdings ist aber auch -6 * -6 gleich 36) Und ihr könnt mich schlagen, wenn ich 1111001 mal 1111001 (jeweils -6 im 2-er Komplement, dargestellt mit 7 Bit) rechne, dann kommt bei mir alles mögliche raus, nur nicht 36 Ich kann das hier >> Ich kenn das eigentlich nur so, dass man zu Beginn einer Multiplikation >> erst mal alle beiden Teilnehmer positiv macht > > Mindestens bei der Zweierkomplementmultiplikation kannst du dir diesen > Schritt sparen, bei richtiger Vorzeichenbehandlung der Teilprodukte ist > das überflüssig. ums Verrecken nicht nachvollziehen.
Karl heinz Buchegger schrieb: > Ähm. > 6 * 6 ist aber 36 nimm es ihm nicht übel, sein Rechner ist nicht mehr der Jüngste.
Karl heinz Buchegger schrieb: > Und ihr könnt mich schlagen, wenn ich > 1111001 mal 1111001 (jeweils -6 im 2-er Komplement, dargestellt mit > 7 Bit) rechne, dann kommt bei mir alles mögliche raus, nur nicht 36 mag vielleicht auch daran liegen, dass -6 eben nicht 1111001 im 2-er Komplement ist :-) Grrrrr, also nochmal. Ich hab jetzt schon fast 2 Seiten mit binären Multiplikationen vollgekritzelt :-)
Karl heinz Buchegger schrieb: > Karl heinz Buchegger schrieb: > >> Und ihr könnt mich schlagen, wenn ich >> 1111001 mal 1111001 (jeweils -6 im 2-er Komplement, dargestellt mit >> 7 Bit) rechne, dann kommt bei mir alles mögliche raus, nur nicht 36 > > mag vielleicht auch daran liegen, dass -6 eben nicht 1111001 im 2-er > Komplement ist :-) > > Grrrrr, also nochmal. Ich hab jetzt schon fast 2 Seiten mit binären > Multiplikationen vollgekritzelt :-) Tatsache: Jetzt hab ichs tatsächlich rausgekriegt. Muss mich wohl vorher irgendwo beim Untereinanderschreiben verhaut haben :-) Nachdem ich dann am karierten Papier die Zahlen sauber untereinander geschrieben habe, kommt auch bei -6 * -6 tatsächlich 36 raus (im 2-er Komplement)
Bevor ich mich jetzt hinlege (es ist schon spät) möchte ich auf meine drei Beispiele (siehe oben) verweisen, die einwandfrei funktionieren - sei es das 2er - oder das 1er Komplement.
> möchte ich auf meine drei Beispiele (siehe oben) verweisen, Du bist noch die Erklärung für die 21 schuldig... ;-) Beitrag "Re: Einerkomplement Multiplikation"
A. K. schrieb:
[...]
Korektur: Das funktioniert nur wenn die rechte Seite positiv ist. Die
linke Seite darf negativ sein, wenn man das Vorzeichen korrekt mitnimmt.
Karl heinz Buchegger schrieb: > ums Verrecken nicht nachvollziehen. Wenn beide Seiten negativ sein können (Zweierkomplement): http://de.wikipedia.org/wiki/Booth-Algorithmus So wird das in Hardware-Multiplizierern implementiert.
Hi. A. K. schrieb: > Womit von dieser Hausaufgabe erst einmal die Fragen zu lösen wären, wie > Addition und Linksschiebeoperation im Einerkomplement funktionieren. > Bischen was solltest du schon noch selber machen ;-). Ich hab hier sicher nicht gefragt, weil ich zu faul bin. Habe lange damit gewartet und wollte selber drauf kommen. Die genannten Regeln dafür glaube ich zumindest zu kennen (mit 1 auffüllen, übertrag dazuaddieren) Ich hab jetzt zwar immer noch nicht 7*-3 aber -3*7 rechnen können. 100*0111 -------- 000000 110011 111001 111100 ------ 10101000 //+übertrag + 10 -------- 101010 = -21 (0er zählen) Schreibt man die 000000 als 111111 passt auch die mit 1 auffüllen Regel beim Shiften wieder. Wie 7*-1 geht kann ich mir immer noch nicht erklären. Wär aber wirklich interessant. MfG
Zu blöd schrieb: > Ich hab jetzt zwar immer noch nicht 7*-3 aber -3*7 rechnen können. Ich auch nicht ;-), hatte mich ja später korrigiert. Bei der linken Seite funktioniert das so, aber ob es bei negativen Werten auf der rechten Seite einen eleganteren Weg als den der Negation gibt weiss ich grad auch nicht. Wobei eine Negation bei Einerkomplement weit weniger Aufwand als bei Zweierkomplement darstellt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.