Erstmal danke an alle die sich bei diesem Thema beteiligt haben! Und die gute Nachricht zum Schluss: Ich habs! Hier kommt der Code:
Das ist natürlich nur das abgespeckte Beispiel mit zwei 3 Bit Zahlen, doch das erweitern auf zwei 39 Bit Zahlen wird nicht mehr das große Problem sein!
Viele Grüße, Daniel
Code:
#include <stdio.h>
#include <math.h>
int main( void)
{
//Variablendeklaration
unsigned int zahl1, zahl2, zahl3; //Faktor 1, Faktor 2 zur Multiplikation, zahl3 zum Speichern von zahl2
//unsigned int zwischenergebnis, zwischenergebnis1; //zur Umwandlung von zahl2 in ein Bit-Array
unsigned int produkt; //Ergebnis zum Überprüfen
unsigned int MSB, LSB; //MSB und LSB, beide sollen 3 Bit groß sein
char zahlarray[3]; //zahl2 soll hier bitweise gespeichert werden
int i; //Schleifenzähler
MSB = 0;
LSB = 0;
//Eingabeaufforderung
printf( "Bitte geben Sie eine Zahl zwischen 0 und 7 ein: "); //Faktor 1, max 3 Bit groß
scanf( "%d", &zahl1);
printf( "Bitte geben Sie eine zweite Zahl zwischen 0 und 7 ein: "); //Faktor 2, max 3 Bit groß
scanf( "%d", &zahl2);
//Rechnung
produkt = zahl1 * zahl2; //Ergebnis zum überprüfen
zahl3 = zahl2; //Umspeichern von zahl2 in zahl3
for( i = 2; i >= 0; i--) //Darstellung von zahl3 in einem Bit-Array
{
zahlarray[i] = zahl3 / pow( 2, i);
if( zahlarray[i] == 1)
{
zahl3 = zahl3 - pow( 2, i);
}
}
for( i = 2; i >= 0; i--) //Ausgabe des Bit-Arrays
{
printf( "%d", zahlarray[i]);
}
printf( "\n");
for( i = 2; i >= 0; i--) //Binäre Multiplikation
{
LSB = LSB << 1;
MSB = MSB << 1;
if( LSB > 7)
{
MSB = MSB + 1;
printf( "\nAddiere 1 zu MSB: %d", MSB);
}
LSB = LSB & 7;
if( zahlarray[i] == 1)
{
LSB = LSB + zahl1; //Addition
if( LSB > 7) //Wenn LSB größer als 7 ist,
{
MSB = MSB + 1; //muss MSB um 1 erhöht werden
printf( "\nAddiere 1 zu MSB: %d", MSB);
}
}
printf( "\nLSB: %d", LSB);
LSB = LSB & 7; //Begrenzung des LSB auf 3 Bit
MSB = MSB & 7; //Begrenzung des MSB auf 3 Bit
printf( "\nLSB nach Durchlauf: %d", LSB); //Ausgabe des LSB nach dem Schleifendurchlauf
printf( "\nMSB nach Durchlauf: %d", MSB); //Ausgabe des MSB nach dem Schleifendurchlauf
printf( "\n\n\n");
}
//Ausgabe
printf( "\n\nProdukt: %d", produkt); //Ergebnis zum Überprüfen
printf( "\nMSB, LSB: %d, %d", MSB, LSB); //LSB, MSB
return 0;
}
Das ist natürlich nur das abgespeckte Beispiel mit zwei 3 Bit Zahlen, doch das erweitern auf zwei 39 Bit Zahlen wird nicht mehr das große Problem sein!
Viele Grüße, Daniel