www.mikrocontroller.net

Forum: PC-Programmierung Bits in C multiplizieren

Autor: Bit (Gast)
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 :(
Autor: Helmi (Gast)
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
Autor: Bit (Gast)
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
Autor: Helmi (Gast)
Datum: 01.05.2008 18:39

Ja.

Schreib mal ein Programm und teste es.

Versuch mach kluch

GrussHelmi
Autor: Bit (Gast)
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?
Autor: Helmi (Gast)
Datum: 01.05.2008 19:00

>for (i = 1; i > 8;i++)

besser

for (i = 1; i < 8;i++)
Autor: Bit (Gast)
Datum: 01.05.2008 19:03

klappt auch nicht. :(
Autor: Bit (Gast)
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;
}
Autor: Helmi (Gast)
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
Autor: Bit (Gast)
Datum: 01.05.2008 19:45

danke

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






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net