großer Datentyp?



  • wenn du einen C99 compiler hast: da gibt es ein 'uintmax_t'
    🙂
    edit: sorry, gilt wahrscheinlich nicht für c++



  • hi,
    uint64_t scheint aus der Welt von M$ zu sein. Denn längsten unsigned int kannst du bei gnu c++ (aber auch bei MS$) definieren mit:

    typedef unsigned long long int uint_max;
    uint_max umx = 12345678901234567890LL;
    
    cout << "ulong: " << ULONG_MAX << "   umx: " << umx << endl;
    
    ulong: 4294967295    umx: 12345678901234567890
    

    Wobei ULONG_MAX eine Konstante aus limits.h ist (wirklich kurz im vergleich zu umx, dem Martin Luther wirds wohl passen 😃 😃 ).

    umx ist doch schon imposant lang, oder?

    Wenn du allerdings beliebig lang rechnen willst, solltest du die phantastische GMP (Gnu multi precision) nehmen.

    viele grüsse von tesu



  • pumuckl schrieb:

    afaik long int. uint64_t ist vermutlich irgendeine typedef, die irgendein spezieller Compilerhersteller (vielleicht M$?) sich ausgedacht hat, zum Standard gehörts vermutlich nicht.

    boost 😛



  • pumuckl schrieb:

    afaik long int.

    Yep. Bzw unsigned long int.

    pumuckl schrieb:

    uint64_t ist vermutlich irgendeine typedef, die irgendein spezieller Compilerhersteller (vielleicht M$?) sich ausgedacht hat, zum Standard gehörts vermutlich nicht.

    uint64_t gehört zum C Standard. (C99, stdint.h)



  • C++0x will (lt. iX, aktuelle Ausgabe) den Datentyp 'long long int' als längsten Datentyp einführen. Viele Compiler unterstützen den schon.



  • gugscht du da, Rudolph:

    tesuji schrieb:

    typedef unsigned long long int uint_max;
    uint_max umx = 12345678901234567890LL;
    
    cout << "ulong: " << ULONG_MAX << "   umx: " << umx << endl;
    
    ulong: 4294967295    umx: 12345678901234567890
    

    😮

    von Ney



  • Konrad Rudolph schrieb:

    C++0x will (lt. iX, aktuelle Ausgabe) den Datentyp 'long long int' als längsten Datentyp einführen. Viele Compiler unterstützen den schon.

    alle microsoftcompiler ab 2003. davor gab es bereits den __int64 datentypen, welcher genau die selbe länge hatte.



  • hi ms_user 👎
    auch bei MSVC galt schon immer _int64 != long long int. Schau mal, was ich zwei postings zuvor zitierte, und versuch mal eine _int64 variable mit dieser 20stelligen Zahl zu initialisieren.
    von Ney



  • groovemaster schrieb:

    pumuckl schrieb:

    afaik long int.

    Yep. Bzw unsigned long int.

    pumuckl schrieb:

    uint64_t ist vermutlich irgendeine typedef, die irgendein spezieller Compilerhersteller (vielleicht M$?) sich ausgedacht hat, zum Standard gehörts vermutlich nicht.

    uint64_t gehört zum C Standard. (C99, stdint.h)

    Stimmt so nicht ganz, lieber groovemaster, uint64_t ist eine Erweiterung zum ISO Standard, die unter bestimmten Voraussetzungen (POSIX Konformität) notwendig ist. Sie ist im Dokument http://www.opengroup.org/onlinepubs/009695399/ eindeutig mit [CX] (... extends the ISO C standard) gekennzeichnet.

    von Ney



  • nexperty schrieb:

    Stimmt so nicht ganz, lieber groovemaster, uint64_t ist eine Erweiterung zum ISO Standard, die unter bestimmten Voraussetzungen (POSIX Konformität) notwendig ist. Sie ist im Dokument http://www.opengroup.org/onlinepubs/009695399/ eindeutig mit [CX] (... extends the ISO C standard) gekennzeichnet.

    Der Standard ISO C99 definiert sehr wohl mehrere Datentypen (u)intN_t, wobei N auch 64 sein kann. Die Typen sind zwar als optional bezeichnet, deshalb kann man aber nicht sagen sie seien nicht Bestandteil des Standards.



  • Hi LordJaxom

    LordJaxom schrieb:

    nexperty schrieb:

    Stimmt so nicht ganz, lieber groovemaster, uint64_t ist eine Erweiterung zum ISO Standard, die unter bestimmten Voraussetzungen (POSIX Konformität) notwendig ist. Sie ist im Dokument http://www.opengroup.org/onlinepubs/009695399/ eindeutig mit [CX] (... extends the ISO C standard) gekennzeichnet.

    Der Standard ISO C99 definiert sehr wohl mehrere Datentypen (u)intN_t, wobei N auch 64 sein kann. Die Typen sind zwar als optional bezeichnet, deshalb kann man aber nicht sagen sie seien nicht Bestandteil des Standards.

    Bezüglich C99 hast du für N = 8, 16 und 32 recht. N = 64 ist in der Aufzählung nicht enthalten. Das kannst du unter der von mir angegebenen Quelle, headers, stdint.h nachlesen. Allerdings geht die Diskussion jetzt an der ursprünglichen Frage nach dem längsten int vorbei, denn long long int schlägt ja uint84_t um mindestens 10 Stellen.
    von Ney



  • nexperty schrieb:

    hi ms_user 👎
    auch bei MSVC galt schon immer _int64 != long long int. Schau mal, was ich zwei postings zuvor zitierte, und versuch mal eine _int64 variable mit dieser 20stelligen Zahl zu initialisieren.
    von Ney

    bist ein n00b?



  • nexperty schrieb:

    groovemaster schrieb:

    pumuckl schrieb:

    afaik long int.

    Yep. Bzw unsigned long int.

    pumuckl schrieb:

    uint64_t ist vermutlich irgendeine typedef, die irgendein spezieller Compilerhersteller (vielleicht M$?) sich ausgedacht hat, zum Standard gehörts vermutlich nicht.

    uint64_t gehört zum C Standard. (C99, stdint.h)

    Stimmt so nicht ganz, lieber groovemaster, uint64_t ist eine Erweiterung zum ISO Standard, die unter bestimmten Voraussetzungen (POSIX Konformität) notwendig ist. Sie ist im Dokument http://www.opengroup.org/onlinepubs/009695399/ eindeutig mit [CX] (... extends the ISO C standard) gekennzeichnet.

    Quelle uninteressant und nicht relevant. Referenz ist ISO/IEC 9899:1999 und nichts anderes. Und dort ist uint64_t eindeutig als Typ definiert. Siehe 7.18 und B.17. Dass dieser optional ist und von der Implementation nicht definiert werden muss, ist ebenso irrelevant, lieber nexperty. 😉 Dir ist hoffentlich klar, dass Spezifikation und Implementation zwei verschiedene Paar Schuhe sind.

    nexperty schrieb:

    Bezüglich C99 hast du für N = 8, 16 und 32 recht. N = 64 ist in der Aufzählung nicht enthalten.

    Dann solltest du nochmal genau hinschauen.

    7.18.1-3 schrieb:

    These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, it shall define the corresponding typedef names.

    Für den restlichen Käse den du geschrieben hast, würde ich wärmstens empfehlen, deine Grundlagenkenntnisse aufzufrischen.


Anmelden zum Antworten