Problème incrémentation.

Dell -  
KX Messages postés 19031 Statut Modérateur -
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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. Dell
       
      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
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
    3. Dell
       
      a + (b++) - b vaut a + 1 et a + b - (b++) vaut a ?
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      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