hallo, Ich lerne grad C. Habe dass Kapitel mit den logischen Operatoren durch. Nun möcht ich die Aufgabe versuchen. Multiplikation zweier Zahlen ohne "*". Ich weiß aus der Digitaltechnikvorlesung noch, dass ich zwei Bits mit einem AND multiplizieren kann. Zahl 1: 1001 (9)_10 Zahl 2: 1011 (11)_10 1001 * 1011 = ? Also Bit 0: 1 & 1 = 1 Bit 1: 0 & 1 = 0 Übertrag 1 Bit 2: 0 & 1 = 0 + Übertrag = 1 Bit 3: 1 & 1 = 1 Bit 0: 1 & 0 = 0 Bit 1: 0 & 0 = 0 Bit 2: 0 & 0 = 0 Bit 3: 1 & 0 = 0 ... Somit gilt 0001001 0010010 0000000 0100100 ____ 0111111 Ergebnis: 1001 .. stimmt nicht :(
>Ich weiß aus der Digitaltechnikvorlesung noch, dass ich zwei Bits mit >einem AND multiplizieren kann. Ja aber nur für eine Stelle. Wie machst du es denn selber zu Fuss. 1001 * 1011 = 99 ----------- 1001 (1001 * 1) 0000 (1001 * 0) 1001 (1001 * 1) 1001 (1001 * 1) ======= 1100011 = 99 Du must die Stellen verschieben und dann addieren Gruss Helmi
Meine Idee: Ich nehme Faktor 1 Ich nehme Faktor 2 .. if (Faktor 2 & 1) //Wenn Bit_0 = 1 { Faktor_1 //Ist Faktor_1 ein zwischenergebnis } Nun verschiebe ich den Faktor_2 ein Bit nach Links und wiederhole if (Faktor 2 & 1) { Faktor 1 } Ich verschiebe wieder ... if (...) { } und nocheinmal ... Nun kann ich meine Zwischenergebnisse einfach adieren´. Ablauf korrekt? Also natürlich alles in ne Schleife packen
Ja. Schreib mal ein Programm und teste es. Versuch mach kluch GrussHelmi
Ich gehe nun davon aus, dass meine Zahl 8 Bit lang ist (char) for (i = 1; i > 8;i++) { if (Faktor_2 & 1) { Produkt = Produkt + Faktor_1; } Faktor_2 <<= 1; } Habe es kompelliert. Geht aber nicht :( ne Idee was ich vergessen habe?
#include <stdio.h> int main (void) { int Faktor_1, Faktor_2 ,i, Produkt; printf ("Geben Sie dem ersten Faktor ein : "); scanf ("%d",&Faktor_1); fflush (stdin); printf ("Geben Sie den zweiten Faktor ein: "); scanf ("%d",&Faktor_2); fflush (stdin); for (i = 1; i < 32;i++) { if (Faktor_2 & 1) { Produkt = Produkt + Faktor_1; } Faktor_2 <<= 1; } printf ("%d multipliziert mit %d ergibt: %d\n",Faktor_1, Faktor_2, Produkt); system ("Pause"); return 0; }
void main(void) { int Faktor_1, Faktor_2 ,i, Produkt; printf ("Geben Sie dem ersten Faktor ein : "); scanf ("%d",&Faktor_1); fflush (stdin); printf ("Geben Sie den zweiten Faktor ein: "); scanf ("%d",&Faktor_2); fflush (stdin); Produkt = 0; for (i = 0; i < 32;i++) { if (Faktor_2 & 0x1) { Produkt = Produkt + Faktor_1; } Faktor_2 >>= 1; Faktor_1 <<= 1; } printf ("%d multipliziert mit %d ergibt: %d\n",Faktor_1, Faktor_2,Produkt); } Versuchs mal so
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.