yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 2009
-
9 août 2006 à 11:59
yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 2009
-
9 août 2006 à 15:52
Bonjour à toutes et à tous.
Je souhaite pouvoir gérer les entiers de 64 bits sous Dev-C++ (et je compte y rester).
Pour cela j'utilise la déclaration de "__int64" ou bien "long long".
Le programme se compile sans broncher sur les types de variables donc il les connait.
Sauf que si dans le code je mets quelque chose du genre : "__int64 Taille = 100000000000;", le compilateur me dit que :
"integer constant is too large for "long" type ".
Si vous avez des propositions ou solutions pour arriver à résoudre ce problème je vous en serais très reconnaissant.
YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
cs_Clem
Messages postés282Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention12 février 2007 9 août 2006 à 14:03
Le problème est assez simple à comprendre, tu lui as entré le nombre "100000000000", sauf que ce nombre tu l'as entré sans lui préciser que tu voulais qu'il le traite comme un int64, du coup il continue à faire comme si c'était un nombre de 32 bits, et bien sûr c'est beaucoup plus grand que 4294967296. Il doit donc y avoir aussi en plus de ce problème qu'il t'indique, le problème comme quoi tu essayais d'assigner deux types incompatibles (__int64 et long)
Je pense que tu devrais essayer
__int64 Taille = (__int64)100000000000;
Mais j'en doute énormément qu'il t'affecte pour autant la bonne valeur, et penches toi plutôt vers quelque chose du genre, que j'ai trouvé sur google :
void __stdcall Test(HWND hdlg)
{
char buf[32];
__int64 r;
strcpy(buf, "-987654321987654321");
r = _atoi64(buf);
_i64toa(r, buf);
MessageBox(hdlg, buf, szappname, 0);
}
Ou alors, tu devras travailler en mémoire, comme mixer ton __int64 en union façe à deux de 32 bits. Ca devrait être plus rapide à éxécuter qu'avec les api, mais dans certains cas ça pourrait complexifier la chose.
ps: DevC++ n'est qu'un IDE, programme qui relie tous les outils de programmation. Le compilateur c'est plutôt gcc alias mingw.
Et aussi, évites de penser les __int64 comme des "long long", ce qui
n'est pas compatible processeurs 64 bits d'après mes souvenirs.
yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 20092 9 août 2006 à 15:00
T'as proposition ne me convient pas car il faut que je puisse gérer facilement sa valeur (ajout ou retrait de valeur, division, ...).
De plus l'erreur du compilateur m'indiquait : "constante trop grande pour loger dans un long", ce qui veut dire qu'il considère la variable Taille comme un long alors qu'il est clair qu'elle est déclarée en __int64. Même en forçant, avec un cast, la variable et la constante, il me met toujours la même erreur.
En tous cas merci de t'être penché sur mon cas c'est très sympa de ta part.
Si tu as une autre idée que la gestion brute en mémoire ça m'arrangerait beaucoup. :-p
YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Vous n’avez pas trouvé la réponse que vous recherchez ?