Forum: Mikrocontroller und Digitale Elektronik Einerkomplement Multiplikation


von Zu blöd (Gast)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

- 3 -> 1111 1101
  7 -> 0000 0111
*
-----------------
-21 -> 1110 1001
=================

von Zu blöd (Gast)


Lesenswert?

Danke, aber du rechnest im 2er Komplement. Probeme treten nur im wohl 
weniger verbreitetem Einerkomplement auf.

von U.R. Schmitt (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Klaus W. (mfgkw)


Lesenswert?

Darf man fragen, wozu man das braucht?

von (prx) A. K. (prx)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

Zahlenbreite 4 Bit.

- 3        1100
  7        0111
*
---------------
 84    101 0100
>>
>>
---------------
 21      1 0101
===============

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:
> - 3        1100
>   7        0111
> ---------------
>  21      1 0101
-3 * 7 gibt aber -21 ... :-/

von Martin (Gast)


Lesenswert?

Das ist ja der Witz an der Rechnung ;)

von Karl H. (kbuchegg)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

... Mathematik Texte des Altertums ...

Wir sind eben große Verehrer des Muhammad ibn Musa, Abu Dscha'far 
al-Chwarizmi :)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Zu blöd (Gast)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

... 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
======================

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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"?

von Martin (Gast)


Lesenswert?

... Woher kommt jetzt hier "geteilt durch 21"? ...


Von deiner Forderung von 4- auf 8-Bit "umzusteigen".

von U.R. Schmitt (Gast)


Lesenswert?

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 :-)

von (prx) A. K. (prx)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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 ;-).

von Martin (Gast)


Lesenswert?

... Alchemie im binären :-) ...

Da ist so nicht korrekt. Es handelt sich eher um eine Mischung aus 
al-Chwarizmi & Nasir ad-Din.

von (prx) A. K. (prx)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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...

von (prx) A. K. (prx)


Lesenswert?

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 ;-).

von Klaus W. (mfgkw)


Lesenswert?

Oder halt bei negativen Zahlen eins abziehen, um ins
Zweierkomplement zu kommen, und dann wie gehabt...

von Klaus W. (mfgkw)


Lesenswert?

A. K. schrieb:
> Andererseits machte es der Multiplier der CDC6600 ebenfalls so ;-).

Mann, hast du moderne Kisten!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Karl H. (kbuchegg)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> Ähm.
> 6 * 6 ist aber 36
Echt jetzt? Es ist schon spät... ;-)

von (prx) A. K. (prx)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ähm.
> 6 * 6 ist aber 36

nimm es ihm nicht übel, sein Rechner ist nicht mehr der Jüngste.

von U.R. Schmitt (Gast)


Lesenswert?

Lothar Miller schrieb:
> Echt jetzt? Es ist schon spät... ;-)

Sendest Du heute aus Australien? :-)

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von Karl H. (kbuchegg)


Lesenswert?

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)

von Martin (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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"

von (prx) A. K. (prx)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Zu blöd (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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
Noch kein Account? Hier anmelden.