kostenloser Webspace werbefrei: lima-city


Ganzzahldatentyp größer unsigned int

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Hallo,

    ich schreibe gerade ein Programm, dass Ganzzahlen bis ca. 10^10 in einer Variablen speichern muss. Der Datentyp unsigned int geht bis 4.294.967.295 (32Bit-System), ist also zu klein. Gibt es einen größeren Datentyp, der Ganzzahlen speichern kann?

    Gruß
    Jonas

    edit:
    In Java gibts noch long - der geht von –2^63 bis 2^63, wäre also groß genug. So was bräuchte ich für C++.


    Beitrag geändert: 13.7.2008 17:14:15 von sandrock-jonas
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Im offizielle Standard gibt es noch nichts, aber die meisten Compiler unterstützen
    unsigned long long int foo;
    mit einem maximalen Wert von 18446744073709551615.

    €dit: http://home.att.net/~jackklein/c/inttypes.html#long


    Beitrag geändert: 13.7.2008 17:21:54 von kochmarkus
  4. Autor dieses Themas

    sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    unsigned long long int hatte ich auch schon mittels Google gefunden, aber da motzt mein Compiler (G++), wenn ich eine Zahl in dieser Größenordnung speichern will:
    Fehler: Ganzzahlkonstante ist zu groß für »long«-Typ
  5. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    unsigned long long int ist auch C only, für C++ fällt mir jetzt spontan nix ein.


    €dit: Hab grad noch was gefunden, wenn du eine Konstante zuweisen will musst du ULL (für unsigned long long) mit anhängen, also z. B. so:
    #include <iostream>
    
    using namespace std;
    
    int main(void) {
      unsigned long long int foo = 500000000000ULL;
      cout << foo << endl;
    }

    Funktioniert mit g++, beim VC6 ist es übrigens nicht nötig ULL mit dranzuhängen.

    Beitrag geändert: 13.7.2008 17:55:25 von kochmarkus
  6. Autor dieses Themas

    sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Ok, mit Konstanten funktioniert das, aber ich brauche es für Variablen, die zur Laufzeit zugewiesen werden.
    Ich hab\' mittels Google auch noch so was wie __int64 gefunden, aber das scheint irgendwas von Microsoft zu sein und funktioniert mit g++ nicht.
  7. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Funktioniert bei mir auch:
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main(void) {
      unsigned long long int foo;
      cout << \"Grosse Zahl: \";
      cin >> foo;                //z. B.:   10000000000
      cout << foo << endl;       //Ausgabe: 10000000000
      unsigned long long int bar = pow(10.0,10);
      cout << bar << endl;
    }



    Beitrag geändert: 19.7.2008 17:12:15 von kochmarkus
  8. Zitat: Der Datentyp unsigned int geht bis 4.294.967.295 (32Bit-System), ist also zu klein.

    Unter 32-Bit geht da leider auch nicht mehr bei int, zumindest nicht ohne Programmieraufwand.

    Wenn man damals unter Asm eine grössere als die max möglichste Zahl haben wollte, hatte man einfach den Wert überlaufen lassen, wenn der Wert übergelaufen war, einfach nur den entsprechenden Stack abgefragt und den Rest in das nächste Feld geschoben.

    d.h. es gibt da eine entsprechende Methode die Zahlen zu zerlegen, leider habe ich mich mit diesem Thema nicht näher beschäftigt, daher kann ich dir in dieser richtung keine tipps geben.

    ansonsten kannst du es mit double noch probieren, da dieser typ eigentlich solch einen überlauf von hause aus unterstützt (und damit 64 bit simuliert), allerdings weiss ich nicht ob der datentyp deinen Anforderungen entspricht

    Das kann man bei c++ auch mit den mmx Erweiterungen simulieren wenn man unbedingt int haben will, benötigt aber glaub ich entsprechenden asm befehl um dies zu aktivieren und den Stack-zustand auszulesen.

    Beitrag geändert: 24.7.2008 19:40:01 von raanubis
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!