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