Und es ist also völlig unmöglich die so generierten Zahlen zu einer anderen dazuzuaddieren.
Mal ehrlich: misverstehen wir uns gerade, oder willst du mich einfach nur verarschen?
Druckbare Version
Nein.. genau das tut das Programm oben doch!
a += b
b += 2
(a wird um den Wert b erhöht, b wird um 2 erhöht, Vorgang wiederholt sich durch die Schleife)
Das Problem besteht doch nur darin das sich so hohe Zahlen wie ich sie brauche nicht in einer Variable abspeichern lassen!
MfG
B4n4n4
Und wieso nicht?
Hatten wir nicht auch schon geklärt, dass ein unsigned long long (<-- zwei mal long hintereinander - NICHT NUR EINMAL!) maximal 0xFFFFFFFFFFFFFFFF werden kann?
Also mit deiner Erklärung hört es sich schon fast an, als ob BlackBerry zu dumm wäre das selbst zu sehen (und das ist er garantiert nicht!).
Und die Antwort wurde dir schon gegeben. Benutze einen "unsigned long long" als Datentyp.
Edit: BB war schneller....
Mit freundlichen Grüßen
DoS
Damit ergäbe sich also folgender Quellcode:
Wobei -224042608 heraus kommt, was ja wohl kaum richtig sein kann! Mit niedrigen Zahlen dagegen funktioniert das Programm einwandfrei, es muss an den großen Zahlen liegen, oder findet jemand noch andere Fehler?Code:#include <stdio.h>
unsigned long long a = 1, b = 3, i;
int main()
{
for (i = 1; i <= 244755; i++)
{
a += b;
b += 2;
printf ("%d", a);
}
printf ("\a\n%d", a);
return 0;
}
//EDIT
Ich möchte hier niemanden als Dumm bezeichnen, gerade da ich derjenige bin der hier die Frage stellt. Wenn jemand allerdings eine Lösung vorschlägt, und auf die richtigkeit seiner Lösung behaart (die in diesem Fall nicht richtig ist) dann finde ich das kaum gerechtfertigt wenn dann noch Sätze wie "willst du mich einfach nur verarschen?" kommen :(
MfG
B4n4n4
@B4n4n4:
die meinen nicht unsigned long long INT vary; sondern ohne INT
also:
unsigned long long vary;
vielleicht ist das hier das Problem...
es geht auch der Vorschlag mit __int64:
__int64 vary;
beide dürften gleich "groß" sein, nämlich 64bit ;)
edit: Hat sich geklärt sry..
Die Ausgabe liegt an printf und nicht an den Zahlen.
printf ist darauf konzepiert bei %d normale Integer zu bearbeiten.
Dabei ist das höchstwertige Bit der 32bit für das Vorzeichen zuständig.
Bei einer vorzeichenlosen 64bit-Zahl wird dieses Bit (bit 31; wenn man von 0 anfängt zu zählen) ein ganz normales Bit wie jedes andere.
An deiner Stelle würde ich mir eine eigene unsigned long long to string Funktion schreiben.
EDIT:
@Keksdose
unsigned long long int ist das selbe wie unsigned long long.
Um genau zu sein ist long eher eine Art prefix. Wird kein int angegeben (könnte auch ein double sein; long double existiert...), so wird automatisch von einem int ausgegangen.
Selbiges gilt für short.
short := short int (16bit)
int := long int (32bit)
long := long int (32bit)
long long := long long int (64bit)
(Angaben für ein 32bit System und GCC; die Implementierung von der genauen größe von int wird vom Standart nicht vorgeschrieben und ist Compilerherstellern überlassen)
Das klingt für einen Anfänger kompliziert...
Naja setze mich mal daran. Vielen Dank!
MfG
B4n4n4
Gut, dann habe ich dich einfach missverstanden. Um ehrlich zu sein, habe ich es auch nur kurz überflogen, weil ich bei jemandem zu Besuch bin.
Sorry :D