désincrémentation
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

désincrémentation



  1. #1
    invite9d6f3ec5

    désincrémentation


    ------

    Bonjour,
    J'arrive pas à résoudre cette instruction: j=--j+i, on me dit de trouver les valeurs de i et j (i=2,j=2)
    Merci d'avance.

    -----

  2. #2
    luc_1049

    Re : désincrémentation

    Bonsoir

    Il faut considérer d'une manière générale la priorité des opérateurs et l'allier à la connaissance du langage. Consultez par exemple un livre tel le kernighan et ritchie pour la syntaxe du c. Cf pré ou post...
    cdlt

  3. #3
    bisou10

    Re : désincrémentation

    le égal est une affectation, simplement. Oublie le, calcule ton --j+i, et tu auras ta réponse.

  4. #4
    polo974

    Re : désincrémentation

    On dit décrémentation, c'est un poil plus court...

    et ici: --j, il s'agit de pré-décrémentation donc on prend j, on lui fait -1 (on le range), on continue le calcul...

    alors que si c'était j--, c'était de la post-décrémentation, on aurait prit j pour le reste du calcul, on aurait rangé le résultat dans la variable désignée avant le = (encore une fois j), puis on aurait la fait décrémentation.

    mais comme ici, c'est j qui est affecté et que le reste du calcul n'est pas affecté par l'ordre des opération, c'est pareil...

    donc j=--j+i et j=j--+i sont équivalents,
    mais j=--j*i et j=j--*i ne le sont pas,
    ni i=--j+i et i=j--+i ne le sont pas non plus...

    bref, l'exemple de base est assez mal choisi pour présenter la pré-décrémentation (et la post-décrémentation)...
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    Bluedeep

    Re : désincrémentation

    Bonjour

    Je note que les réponses ont été fournies pour le C (et qu'elles sont valables aussi pour Java, C++, C# & JavaScript) mais qu'on ne sait pas pour quel langage la question a été posée .....

    Je dis ça, je dis rien, hein .....
    Dernière modification par Bluedeep ; 15/04/2014 à 10h44.

  7. #6
    invitebdf515f4

    Re : désincrémentation

    Citation Envoyé par polo974 Voir le message
    donc j=--j+i et j=j--+i sont équivalents
    Pas d'accord.
    --j rend la valeur de j après décrémentation alors que j-- rend la valeur de j avant décrémentation.

    Avec i = 2 et j = 2,
    j=--j+i donnera j=3
    j=j--+i donnera j=4

  8. #7
    polo974

    Re : désincrémentation

    Citation Envoyé par hlbnet Voir le message
    Pas d'accord.
    --j rend la valeur de j après décrémentation alors que j-- rend la valeur de j avant décrémentation.

    Avec i = 2 et j = 2,
    j=--j+i donnera j=3
    j=j--+i donnera j=4
    Et pourtant...
    en tout cas avec gcc comme il y a post-décrémentation, j=j--+i donne j=3...

    En fait, c'est semble-t-il indéterminé (la post-décrémentation peut se faire avant ou après l'affectation du = ) :
    http://en.cppreference.com/w/cpp/language/eval_order
    i = i++ + 1; // undefined behavior (but i = ++i + 1; is well-defined)
    Donc, la balle au centre ...
    Jusqu'ici tout va bien...

  9. #8
    Bluedeep

    Re : désincrémentation

    Citation Envoyé par polo974 Voir le message
    En fait, c'est semble-t-il indéterminé (la post-décrémentation peut se faire avant ou après l'affectation du = ) :
    C'est d'autant plus indéterminé que le langage n'est pas précisé dans la question ....

  10. #9
    invitebdf515f4

    Re : désincrémentation

    En java, ça fonctionne comme j'ai indiqué.
    Comme dit Bluedeep l'auteur aurait du préciser le langage.

    Et je note que si, en C, une des deux formes est indéterminée et pas l'autre, il est alors faux de dire :
    Citation Envoyé par polo974
    donc j=--j+i et j=j--+i sont équivalents