OVH Cloud OVH Cloud

Recherche classe d'entiers > 32bits

5 réponses
Avatar
Laurent
Salut,

Pour des calculs sur des tailles de fichiers en octets je déborde avec des
"unsigned long". Je cherche donc une classe toute faite qui permette de
faire des calculs et des affichages sur des entiers plus longs. Ca devrait
exister mais j'ai pas trouvé.

Merci.

5 réponses

Avatar
Cyrille
Salut,

Pour des calculs sur des tailles de fichiers en octets je déborde avec des
"unsigned long". Je cherche donc une classe toute faite qui permette de
faire des calculs et des affichages sur des entiers plus longs. Ca devrait
exister mais j'ai pas trouvé.


Certaines architectures définissent "long long" qui doit faire 64 bits,
garantis par le standard du C99 mais pas par celui du C++, je crois.
Sous Windows on trouve aussi __int64.

Avatar
Laurent
Oui effectivement __int64 marche avec mon compilo sous windows mais pas long
long.

Merci bien.
Avatar
Fabien LE LEZ
On Sun, 6 Mar 2005 22:47:54 +0100, "Laurent" :

Oui effectivement __int64 marche avec mon compilo sous windows mais pas long
long.


Histoire de faciliter la portabilité, je te conseille d'écrire une
fois pour toute

typedef __int64 Entier64Bits;

et de n'utiliser que le type "Entier64Bits" -- ainsi, si jamais tu
dois compiler ton code sur une autre plate-forme, seule la ligne avec
le typedef devra être adaptée.


--
;-)

Avatar
kanze
Fabien LE LEZ wrote:
On Sun, 6 Mar 2005 22:47:54 +0100, "Laurent"
:

Oui effectivement __int64 marche avec mon compilo sous
windows mais pas long long.


Histoire de faciliter la portabilité, je te conseille d'écrire
une fois pour toute

typedef __int64 Entier64Bits;

et de n'utiliser que le type "Entier64Bits" -- ainsi, si
jamais tu dois compiler ton code sur une autre plate-forme,
seule la ligne avec le typedef devra être adaptée.


Histoire de compatibilité, inclure <stdint.h>, et se servir
d'int64_t me semble le plus indiqué. Avec la condition,
évidemment, que si ton compilateur n'offre pas encore
<stdint.h>, il faut que tu l'écris. (Mais n'en écrire que les
parties dont tu as besoin, ce n'est pas autant de travail que
ça.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Laurent
Histoire de faciliter la portabilité, je te conseille d'écrire
une fois pour toute

typedef __int64 Entier64Bits;

et de n'utiliser que le type "Entier64Bits" -- ainsi, si
jamais tu dois compiler ton code sur une autre plate-forme,
seule la ligne avec le typedef devra être adaptée.


C'est une bonne idée effectivement, car j'ai déjà dû changer tout les long
en __int64 ... heureusement c'est pas un gros programme.