Problem mit Rechenoperation
-
CTime date1; date1 = CTime::GetCurrentTime(); //aktuelles datum CString zeit1,zeit2; zeit1=date1.Format("%d%m%y"); zeit2=date1.Format("%y%m%d"); int datum,datum1,datum2; datum1=atoi(zeit1); datum2=atoi(zeit2); datum += datum1; datum *= datum2; CString dt; dt.Format("%i",datum); MessageBox(dt,"Datum1 x datum 2");Warum zur Hölle wird hier in der Multiplikation falsch gerechnet?

-
mit was ist denn datum vorbesetzt?
-
datum += datum1;mit datum1 evtl.

-
Selbst wenn er mit datum=0; initialisiert bekommt er ein falsches
Ergebnis.Wenn ich mal mit nem Taschenrechner vom heutigen Datum ausgehe.
71206 * 61207 = 4358305642
Mit dem Code kommt man auf 63338346.
Schaut man sich das genauer an, tritt der Fehler beim Multiplizieren
auf ?!??
-
Selbst wenn er mit datum=0; initialisiert bekommt er ein falsches
Ergebnisich weis ich hab nur auf Smeagol frage geantwortet
hmm also das ist echt interesannt, anscheinend stehen unsere rechner auf zwei verschieden welten in unterschiedlichen sonnensystemen hab das ja auch schon nachvollzogen
mit dem taschenrechner sofern bei mir die stellen reichen
(Datum1 = 1244568 * Datum2 = 4207752) = 5236833491 <--(wie gesagt die stellen reichen warscheinlich nicht)der code rechnet hier bei mir -1834489187

völlig dada
-
71206 * 61207 = 4358305642 = 0x103C6776A = zu gross für nen 4 byte int
Mit dem Code kommt man auf 63338346.
63338346 = 0x3C6776A. Fällt dir was auf?
-

__int64
-
Und wie wandelt er das nun in seinen CString um aus dem int64?
-
Dreddy schrieb:
Und wie wandelt er das nun in seinen CString um aus dem int64?
Da es dafür IMHO keine Konstruktoren gibt, musst Du das manuell machen.
-
CString str; __int64 datum1; //... str.Format("%I64d", datum1); MessageBox(str,"Wert von datum1);FAQ?
-
evtl reicht ein
unsigned long int
?
-
Nein das geht mit dem unsigned long int nicht.
Entweder erhältst du Konstante zu groß, oder einen "Minuswert"
__int64 muss schon sein denke ich.
-
@Fruggle: Glaub in die FAQ muss das nit
.