Grundlagenfrage: >=10 stellige Zahlen, welche Datentypen, welche Funktionen?
-
Hallo!
Ich bin grade dank einer historisch gewachsenen laufenden Nummer an eine Grenze gestoßen, mit der ich bisher nichts zu schaffen hatte. Ich bekomme regelmäßig Zahlenüberläufe.
Und diesen Codeschnipsel handelt es sich:CString strKndNr; CString strDieseKndnr = _T("3001351030"); unsigned long lKndNr = atol(strDieseKndnr); lKndNr = pView->SucheNaechsteFreieKndnr(lKndNr, -1); strKndNr.Format(_T("%ld"), lKndNr);Zuerst kam der Zahlenüberlauf in Zeile 4, mit dem
unsigned longstattlongwar das okay. Das selbe Spiel mit der Funktion in Zeile 6.Aber an Zeile 8 komme ich gerade nicht weiter, der String ist trotz mittlerweile eingefügtem %ld statt %d immer noch negativ.

Was muss ich da machen, damit das klappt? Und was ist jetzt eigentlich meine Zahlengrenze? Irgendwie hab ich die Stelle in der MSDN nicht gefunden.
-
ich glaube bei 'unsigned long' ist die letzte möglich ziffer 4.294.967.295 http://en.wikipedia.org/wiki/Int64
gibt aber noch 'unsigned long long' die ist maximal 18.446.744.073.709.551.615 groß. Da war aber irgendwas mit 64-Bit systemen.
Bei dem Formatbefehl bin ich auch ratlost. ect. %ul oder %lu versucht?
-
Wir halten mal fest:
http://msdn.microsoft.com/en-us/library/s3f49ktz.aspxlong => –2,147,483,648 to 2,147,483,647
unsigned long => 0 to 4,294,967,295
long long => –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned long long => 0 to 18,446,744,073,709,551,615Und zur korrekten Ausgabe mittels Format-Strings:
http://msdn.microsoft.com/en-us/library/tcxf1dw6long unsigned int (entspricht unsigned long) => Prefix: l, Type: o, u, x, or X (also nix mit "d")
-
Danke für deine Antwort Uruk-h4j.

%u hat den gewünschten Effekt.
Oh danke auch an Jochen. Ich habs jetzt in %lu geändert. Das sollte wasserdicht sein.
Wie ist das jetzt mit unsigned long long? Muss man dafür ein 64bit OS haben? Oder geht das auch unter Win98 SE? (Jaja, meine "Lieblingsfrage"...)
Im Normalfall würde ich ja sagen, 4,294,967,295 reicht - aber da die Benutzer gerne mal beim Hochsetzen der Nummer übertreiben bin ich da nicht wirklich sicher. Schließlich haben sie ja auch die aktuelle Nummer erreicht und die ist eigentlich utopisch.
-
estartu schrieb:
Wie ist das jetzt mit unsigned long long? Muss man dafür ein 64bit OS haben?
Nein, Du brauchst nur einen Compiler der das kann...
estartu schrieb:
Oder geht das auch unter Win98 SE? (Jaja, meine "Lieblingsfrage"...)
Mit dem OS hat das nichts zu tun, nur mit dem Compiler.
-
Kann VC 2003 Standard das?
-
Ja.
-
Vielen Dank!
