Cisla

Ing. Miloslav Ponkrác postovni.holub na atlas.cz
Čtvrtek Červen 15 10:18:31 CEST 2000


>V gcc je mo3/4né pou3/4ívat 64-bitový typ long long, je jen potoeba u
printf
>místo "%ld" pou3/4ívat "%Ld". Problém je pak ale s poenositelností takových
>zdrojáku, v Borland C++ jsem s tím ti3/4ce narazil. Pokud by to nestaeilo,
>v libstdc++ je myslím nijaká implementace dlouhé aritmetiky.


I v Borlandu a dalších kompilátorech je to možné, jenom si musíte
nadefinovat něco takového (to je výcuc z jednoho mého hlavičkového souboru
pro portabilitu):

#if defined(__TURBOC__)  ||  defined(_MSC_VER)
  #if defined(_INTEGRAL_MAX_BITS)  &&  (_INTEGRAL_MAX_BITS >= 64)
    typedef unsigned __int64 UNSIGNED64;
    typedef signed __int64 SIGNED64;

    #define NC_UNSIGNED64   ((UNSIGNED64)(n##ui64))
    #define NC_SIGNED64     ((UNSIGNED64)(n##i64))

    #define UNSIGNED64_DEFINED  1
    #define SIGNED64_DEFINED    1
  #endif
  #if defined(_INTEGRAL_MAX_BITS)  &&  (_INTEGRAL_MAX_BITS >= 128)
    typedef unsigned __int128 UNSIGNED128;
    typedef signed __int128 SIGNED128;

    #define NC_UNSIGNED128  ((UNSIGNED128)(n##ui128))
    #define NC_SIGNED128    ((UNSIGNED128)(n##i128))

    #define UNSIGNED128_DEFINED 1
    #define SIGNE128_DEFINED    1
  #endif
#endif

#if defined(__GNUC__)  ||  defined(DJGPP)
  typedef unsigned long long UNSIGNED64;
  typedef signed long long SIGNED64;

  #define NC_UNSIGNED64 ((UNSIGNED64)(n##ULL))
  #define NC_SIGNED64   ((UNSIGNED64)(n##LL))

  #define UNSIGNED64_DEFINED    1
  #define SIGNED64_DEFINED      1
#endif

Potom máte typy UNSIGNED64 a SIGNED64 pro 64-bitový integer bez a se
znaménkem. Na Microsoftu je možné mít ještě UNSIGNED128 a SIGNED128 pro
128-bitový integer.

Miloslav Ponkrác



Další informace o konferenci Linux