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.