Multiplikation von zwei 40 Bit Zahlen / C++

Erstmal danke an alle die sich bei diesem Thema beteiligt haben! Und die gute Nachricht zum Schluss: Ich habs! Hier kommt der Code:

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
 
Zurück
Oben Unten