Forum: PC-Programmierung Bits in C multiplizieren


von Bit (Gast)


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 :(

von Helmi (Gast)


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

von Bit (Gast)


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

von Helmi (Gast)


Lesenswert?

Ja.

Schreib mal ein Programm und teste es.

Versuch mach kluch

GrussHelmi

von Bit (Gast)


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?

von Helmi (Gast)


Lesenswert?

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

besser

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

von Bit (Gast)


Lesenswert?

klappt auch nicht. :(

von Bit (Gast)


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;
}

von Helmi (Gast)


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

von Bit (Gast)


Lesenswert?

danke

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
Noch kein Account? Hier anmelden.