Overflow addition en c
phil
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
comment récuperer les cas d'overflow en c pour l'addition ou la multiplication sur les char, short, int?
peut on recuperer cette erreur? comme les erreurs systemes?
la solution consistant pour l'addition de deux short par exemple, a les surdimensionner en long et de verifier le resultat ne m'interesse pas!!!!
les createur du langage c on t'ils propsé une solution a ce probleme.
merci
peut on recuperer cette erreur? comme les erreurs systemes?
la solution consistant pour l'addition de deux short par exemple, a les surdimensionner en long et de verifier le resultat ne m'interesse pas!!!!
les createur du langage c on t'ils propsé une solution a ce probleme.
merci
2 réponses
les createur du langage c on t'ils propsé une solution a ce probleme.
Non je ne crois pas. C'est plutôt aux programmeurs de prévoir leur type de leurs variables si elles risquent d'être dépassées dans leur capacité.
Non je ne crois pas. C'est plutôt aux programmeurs de prévoir leur type de leurs variables si elles risquent d'être dépassées dans leur capacité.
Salut.
Je ne suis pas expert la dedans, mais si tu fait MAX+1(32XXX+1) tu as soit MIN (-32XXX), soit inf.
Si tu as "inf", c'est simple.
Sinon, tu peux définir une structure se subtituant aux entier, de façon à détecter les dépassements.
struct int2{...}
int2 operator+(int2 a,int2 b)
{
if (a>0&b>0) if (a+b<a|a+b<b) /* traite l'erreur*/ else return a+b;
if (a<0&b<0) if (a+b>a|a+b>b) /* traite l'erreur*/ else return a+b;
...
}
Je ne suis pas expert la dedans, mais si tu fait MAX+1(32XXX+1) tu as soit MIN (-32XXX), soit inf.
Si tu as "inf", c'est simple.
Sinon, tu peux définir une structure se subtituant aux entier, de façon à détecter les dépassements.
struct int2{...}
int2 operator+(int2 a,int2 b)
{
if (a>0&b>0) if (a+b<a|a+b<b) /* traite l'erreur*/ else return a+b;
if (a<0&b<0) if (a+b>a|a+b>b) /* traite l'erreur*/ else return a+b;
...
}