64Bit Zahl ausrechnen

Saimen

Mitglied
Hallo, habe mal ne Frage, versuche sie so verständlich wie möglich zu beschreiben, obwohl ich selbst nicht viel Ahnung habe.
Zur Zeit beschäftige ich mich mit dem Programm uVision 2 von Keil.
Ich muss jetzt etwas programmieren und zwar soll eine 64 bit Zahl berechnet werden.
Also ich habe folgenden Plan:

1111 1111 1111 1111
= int0

1111 1111 1111 1111
= int1

1111 1111 1111 1111
= int2

1111 1111 1111 1111
= int3

int0 + int1
= Long

int2 + int3
= Long

Long + Long
= Double Long

Double Long ist das, was die Funktion ausrechnen soll.
Hat jemand ne Ahnung wie man das machen kann?
Danke schon mal im vorraus!
 
Hallo!


Was genau versuchst du uns denn da mit zu teilen? Ich weiß nicht genau wo da der Streß liegen soll. Du rechnest einfach 2 hoch 64 und dann hast du ne 64 Bit Zahl. Wenn du eine Binäre Zahl hast dann wandle sie doch in dezimal um.



(Oh da war schon wer schneller mit der Antwortz)
 
Zuletzt bearbeitet:
Also ich habe jetzt folgenden Code:

PHP:
void add64
(
unsigned long H1, 
unsigned long L1, 
unsigned long H2, 
unsigned long L2, 
unsigned long *RH, 
unsigned long *RL
)
{
	
	




    *RL = L1 + L2; 

	*RH = H1 + H2; 
}

void main(void)
{
	static word erg;
	unsigned long Res_High;
	unsigned long Res_Low;

	//printf("%d",erg);
	while(1)
	{
	add64(0,0xffffffff,0,0xffffffff,&Res_High, &Res_Low);
	
	
	};
	return ;
	
}

Wenn ich jetzt aber die unten genannten Zahlen:
0xffffffff,0,0xffffffff
ausrechnen will, geht das nicht, weil die Zahlen zu groß sind.
Gibt es da ne Möglichkeit, die einzeln zu zerlegen?
In Form einer Tabelle?
 
Also du suchst einen Datentyp der groß genug ist, um deine 64-Bit Zahl zu speichern?
Das sollte dir _Int64 helfen.

Gruß,
Tim
 
Du hast in Deiner add64-Funktion den Übertrag vergessen. Füge am Ende noch folgende Zeile hinzu:
Code:
if(*RL < L1)(*RH)++;
Wenn das Ergebnis der Addition der unteren Teile kleiner ist als einer dieser Teile, dann hat es einen Übertrag gegeben. Dann mußt Du noch 1 zum Ergebnis der Addition der oberen Teile hinzuzählen.
 
Zurück