cs_tweeder
Messages postés172Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention19 juin 2009
-
13 févr. 2003 à 03:39
jonathanmcdougall
Messages postés64Date d'inscriptiondimanche 9 février 2003StatutMembreDernière intervention 7 mars 2003
-
14 févr. 2003 à 03:28
Salut
Dans mon programme, je dois vérifier si le nombre entré dépasse la capacité d'un unsigned int.
De quelle facon puis-je m'y prendre ? Est-ce que je regarde si ma valeur est en desous de 4294967295 ?
Parce que quand je rentre une grande valeur plus grande que 4294967295, il semble que la valeur soit tronquée automatiquement a 4294967295 !?!?!
Merci de votre aide
jonathanmcdougall
Messages postés64Date d'inscriptiondimanche 9 février 2003StatutMembreDernière intervention 7 mars 2003 13 févr. 2003 à 05:28
> Dans mon programme, je dois vérifier si le nombre entré dépasse la capacité d'un unsigned int.
> De quelle facon puis-je m'y prendre ? Est-ce que je regarde si ma valeur est en desous de 4294967295 ?
> Parce que quand je rentre une grande valeur plus grande que 4294967295, il semble que la valeur soit tronquée automatiquement a 4294967295 !?!?!
Impossible, ce n'est même pas spécifique à ton implémentation, c'est spécifique au *hardware*. Certains processeurs, les intel x86 entre autres, je crois, lance un certain signal que l'on peut attraper avec signal() (<signal.h>).
Les compilateurs ne doivent pas ni lancer d'exception ni faire quoi que ce soit lorsqu'un overflow arrive, il ne doivent que faire un 'wrap-around', c'est-à-dire la transformer en négatif.
De plus, les valeurs maximales sont, elles, définie par ton implémentation. Donc, le 'int' chez moi peut prendre 32 octets et 4 chez vous.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 févr. 2003 à 09:15
Salut,
WIN32 a func GetDlgItemInt(...) qui sait dire si bon ou pas.
Serait pas difficilile d'ecrire une func pour controler si entree > 32 bits. Des que j'ai le temps j'en publie un petit prog demo. Essaie donc entre temps. Jette un oeil sur methode conversion AscciToBinary, je suis sur que tu comprendras comment effectuer le test.
ciao...
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 13 févr. 2003 à 12:54
Cher Jonathan,
je suis curieux de savoir sur quel système tu travaille
en réponse à la question première,
- Si la saisie est faite via "cin",
essayez la petite astuce sur "cin" que j'ai récement posté
http://www.cppfrance.com/article.aspx?Val=1404 - si elle est faite dans un TextBox, alors c'est du texte et il suffit de contrôler la valeur dans notre conversion
Réponse à :
>....
>les valeurs maximales sont, elles, définie par ton >implémentation. Donc, le 'int' chez moi peut prendre 32 >octets et 4 chez vous.
>
> Bonne chance!
>
> Jonathan Mcdougal
> Montréal, Québec
> mcdougalljonathan@hotmail.com
> http://www.multimania.com/utopiasoftware >
Vous n’avez pas trouvé la réponse que vous recherchez ?
omi
Messages postés11Date d'inscriptionsamedi 12 janvier 2002StatutMembreDernière intervention22 juillet 2003 13 févr. 2003 à 13:18
Faudrai voir si il met pas le bits d'overflow a 1 dans les flags mais ca demende un peut de programmation assembleur ça
et ca risque de ne pas marcher si il arrondi la valeur saisie a la limite d'un unsigned int
(note : il doit bien existe une fonction c qui fait ca mais je ne la connais pas)
jonathanmcdougall
Messages postés64Date d'inscriptiondimanche 9 février 2003StatutMembreDernière intervention 7 mars 2003 14 févr. 2003 à 03:28
> >....
> >les valeurs maximales sont, elles, définie par ton >implémentation. Donc, le 'int' chez moi peut prendre 32 >octets et 4 chez vous.
> >
> je suis curieux de savoir sur quel système tu travaille
Athlon MP sous XP et Linux, pourquoi?
> en réponse à la question première,
> - Si la saisie est faite via "cin",
> essayez la petite astuce sur "cin" que j'ai récement posté
> http://www.cppfrance.com/article.aspx?Val=1404
D'accord, j'avais dans la tête une opération arithmétique, pas un cin.
La solution est en effet de tester cin, car si celui-ci ne peut mettre la valeur dans la variable, il met son bit 'fail' à 1, ce qui rend tous les appels subséquents incorrects. Voir "l'astuce" en question.