Bits in C multiplizieren

Gast #857283
Lesenswert?

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 :(
Gast #857296
Lesenswert?

>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
Gast #857304
Lesenswert?

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
Gast #857323
Lesenswert?

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?
Gast #857329
Lesenswert?

#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;
}
Gast #857338
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren