Datum: 01.05.2008 17:44
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 :(
Datum: 01.05.2008 18:01
>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
Datum: 01.05.2008 18:19
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
Datum: 01.05.2008 18:39
Ja. Schreib mal ein Programm und teste es. Versuch mach kluch GrussHelmi
Datum: 01.05.2008 18:58
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?
Datum: 01.05.2008 19:00
>for (i = 1; i > 8;i++)
besser
for (i = 1; i < 8;i++)
Datum: 01.05.2008 19:05
#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;
}
Datum: 01.05.2008 19:29
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
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


