Problème incrémentation.

Fermé
Dell - 7 nov. 2011 à 12:31
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 7 nov. 2011 à 14:29
Bonjour,

Je n'arrive pas à comprendre le résultat suivant :

pour a = 11 et b = -12

a = a+ (b++); Je doit trouver a=-1 et b=-11 alors que moi je trouve a=0 et b=-11 car pour moi la parenthèse est prioritaire donc a = a+ (-11); ensuite a= 11 -11 = 0.

Il n'y a pas d'erreur dans l'énoncé ni dans la correction, j'ai donc besoin de votre aide.

Merci d'avance =)

1 réponse

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
7 nov. 2011 à 12:37
b++ modifie b de -12 à -11 mais c'est l'ancienne valeur qui est obtenue (donc -12)
Donc a = 11 + (-12) = -1.

Pour avoir ton résultat a = 11 + (-11) = 0, il aurait fallu faire a = a+ (++b);
0
Merci pour ta réponse KX j'ai tout compris =D Le premier calcul est : a = a + b et le deuxième est b = b + 1.
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
7 nov. 2011 à 13:42
Pas tout à fait, du moins pas dans le cas général. Comme tu l'as dit la parenthèse est prioritaire, donc il serait plus correct de dire que le fonctionnement est similaire à :

parenthèse = b;
b = b+1;
a = a + parenthèse;

Ici ça ne change rien au résultat, mais si b avait été utilisé ailleurs dans le calcul ça aurait une importance. Exemple : que vaut a + (b++) - b, et que vaut a + b - (b++) ?
0
a + (b++) - b vaut a + 1 et a + b - (b++) vaut a ?
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
7 nov. 2011 à 14:29
Et bien non justement... L'ordre des opérations est :

c = a
c= c + b
b = b + 1
c = c - b

Cela revient donc à dire c = a + b - (b+1) = a-1
Ce n'est pas la parenthèse qui est prioritaire, mais l'opérateur ++ par rapport à +
Mais ici l'ordre de gauche à droite rentre en compte...
0