Priorité et associativité des opérateurs

Le
Greydavayar
Bonjour a tous,

je lis partout le terme "d'associativité" des opérateurs ainsi que le
teme de "priorité" des opérateurs je pense avoir compris celui de la
priorité mais cette notion d'associativité reste très (trop) floue
pour moi et je ne trouve rien qui l'explique clairement sur le net.

Bonne soirée
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 13
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Anthony Gelibert
Le #22541541
Bonjour,
La notion d'associativité mathématique est un concept élémentaire des
mathématiques dont les définitions ne manquent pas sur Internet.

Une simple recherche Google vous orientera vers ceci :
http://www.netmaths.net/lexique/Default.aspx#associativité
http://fr.wikipedia.org/wiki/Associativité
Qui me semble largement accessible.

Bonne nuit.


On 2010-09-04 23:25:11 +0200, Greydavayar said:

Bonjour a tous,

je lis partout le terme "d'associativité" des opérateurs ainsi que le
teme de "priorité" des opérateurs je pense avoir compris celui de la
priorité mais cette notion d'associativité reste très (trop) floue
pour moi et je ne trouve rien qui l'explique clairement sur le net.

Bonne soirée
Pierre Maurette
Le #22541761
Greydavayar, le 04/09/2010 a écrit :
Bonjour a tous,

je lis partout le terme "d'associativité" des opérateurs ainsi que le
teme de "priorité" des opérateurs je pense avoir compris celui de la
priorité mais cette notion d'associativité reste très (trop) floue
pour moi et je ne trouve rien qui l'explique clairement sur le net.



Je pense qu'il y a au moins un bon exemple classique ici, à partir de
l'opérateur == :

Note: à la place de G on trouve plus souvent LR (Left to Right) et RL à
la place de D.

Pour illustrer le fait que * (multiplication) a une priorité (ou
précédence) 13 supérieure à celle de + (addition) 12, il vous suffit de
faire:
printf("%dn", 12 + 2 * 4);
qui affichera 20, comme:
printf("%dn", 12 + (2 * 4));
et non 56 comme le ferait:
printf("%dn", (12 + 2) * 4);

Personnellement, je mets toutes les parenthèses nécessaire pour que le
code soit limpide, sur du code neuf ou si je peux corriger. En effet,
et c'est signalé dans l'article en lien, les priorités ne correspondent
pas aux intuitions les plus courantes, en tout cas pour ceux qui ne
font pas que du C.

--
Pierre Maurette
caribou
Le #22542011
Greydavayar wrote:

Bonjour a tous,

je lis partout le terme "d'associativité" des opérateurs ainsi que le
teme de "priorité" des opérateurs je pense avoir compris celui de la
priorité mais cette notion d'associativité reste très (trop) floue
pour moi et je ne trouve rien qui l'explique clairement sur le net.

Bonne soirée




Ben la priorité des opérateurs c'est la règle qui gère l'ordre dans lequel
des opérateurs différents seront évalués. Par exemple a + b * c signifie
a+(b*c).

L'associativité est utilisée pour savoir dans quel ordre il faut évaluer des
opérateurs identiques. Par exemple, en C l'addition est un opérateur
binaire, donc quand on écrit a + b + c il faut que le compilo ait une règle
pour savoir s'il doit calculer (a+b) + c ou a+(b+c). Souvent le résultat de
ces deux évaluations est identique, et mais, par exemple lorsque que la
magnitude d'un des deux opérande est vraiment très différente de celle des
deux autre, cet ordre peut avoir une influence sur l'arrondi et donc le
résultat.

Petit quizz : comment sont évaluées :
a - b - c ?
a / b / c ?

P.S: à mon avis, un programmeur écrivant des expressions comme ci-dessus
mérite un magistral coup de pied au cul !

--- news://freenews.netfront.net/ - complaints: ---
espie
Le #22542381
In article
Petit quizz : comment sont évaluées :
a - b - c ?
a / b / c ?

P.S: à mon avis, un programmeur écrivant des expressions comme ci-dessus
mérite un magistral coup de pied au cul !



A mon avis, quelqu'un qui ne sait pas lire les expressions ci-dessus et
qui se proclame "programmeur" merite un petit retour sur ses bancs d'ecole,
section arithmetique elementaire...
Wykaaa
Le #22542461
Greydavayar a écrit :
Bonjour a tous,

je lis partout le terme "d'associativité" des opérateurs ainsi que le
teme de "priorité" des opérateurs je pense avoir compris celui de la
priorité mais cette notion d'associativité reste très (trop) floue
pour moi et je ne trouve rien qui l'explique clairement sur le net.

Bonne soirée



Et ceci, ce n'est pas clair :
http://c.developpez.com/cours/bernard-cassagne/node101.php ?

Exemples pour l'associativité :
- Associativité à gauche de l'opérateur + binaire :
a + b + c + d s'interprète comme :
(((a + b) + c ) + d)
- Associativité à droite de l'opérateur d'affectation :
a = b = c = d s'interprète comme :
(a = (b = (c = d)))
c est affecté par d. Puis le résultat est affecté à b, puis le résultat
de cette nouvelle affectation est affecté à a. Je parle de résultat car
il peut y avoir des conversions à chaque étape si les variables ne sont
pas de même type.

Il est conseillé de TOUJOURS mettre les parenthèses dans les expressions.

Priorité des opérateurs :
- La multiplication est prioritaire par rapport à l'addition. Ceci
signifie que :
a + b * c s'interprète comme :
a + (b * c)
- attention à certains cas : l'opérateur & (opérateur ET bit à bit) est
plus prioritaire que les opérations arithmétiques
a + b & c s'interprète comme
a + (b & c)
En général, ce que souhaite le programmeur, c'est plutôt faire :
(a + b) & c (appliquer un "masque" au résultat de l'addition).
J'ai vu je ne sais combien de fois cette erreur en faisant des revues de
code (et pas seulement en C, C++ ou Java mais aussi en PL/1, par exemple).
Greydavayar
Le #22542561
Je vous remercie beaucoup,

J'ai enfin compris cette notion.

Merci a tous et desole de vous avoir derange
Jean-Marc Bourguet
Le #22544611
(Marc Espie) writes:

In article >Petit quizz : comment sont évaluées :
> a - b - c ?
> a / b / c ?
>
>P.S: à mon avis, un programmeur écrivant des expressions comme ci-dessus
>mérite un magistral coup de pied au cul !

A mon avis, quelqu'un qui ne sait pas lire les expressions ci-dessus et
qui se proclame "programmeur" merite un petit retour sur ses bancs d'ecole,
section arithmetique elementaire...



Ou alors il a trop fait d'APL recemment. :-)

A+

--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet
Le #22544671
Anthony Gelibert
Bonjour,
La notion d'associativité mathématique est un concept élémentaire des
mathématiques dont les définitions ne manquent pas sur Internet.

Une simple recherche Google vous orientera vers ceci :
http://www.netmaths.net/lexique/Default.aspx#associativité
http://fr.wikipedia.org/wiki/Associativité
Qui me semble largement accessible.



Et qui ne correspond pas au sens employe dans ce contexte.

Sur cette page, l'associativite est une propriete qui indique que les
parentheses sont supperflues car ne changeant pas le resultat.

Dans ce contexte, c'est une regle du langage indiquant comment ajouter les
parentheses pour optenir une expression non ambigue (tout comme la
priorite).

A noter que ces regles n'impose qu'un ordre partiel d'evaluation.

A noter egalement que les priorites et l'associativite, c'est fonction du
langage. Meme si on tend a avoir des systemes proches de l'usage
mathematique (pour autant qu'il soit bien defini), il y a parfois des
exceptions plus ou moins perturbante (APL n'a pas de priorite et tout les
operateurs sont associatifs a droite, mais c'est un exemple extreme).

A+

--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
caribou
Le #22544841
Jean-Marc Bourguet wrote:

(Marc Espie) writes:

In article >Petit quizz : comment sont évaluées :
> a - b - c ?
> a / b / c ?
>
>P.S: à mon avis, un programmeur écrivant des expressions comme
>ci-dessus mérite un magistral coup de pied au cul !

A mon avis, quelqu'un qui ne sait pas lire les expressions ci-dessus et
qui se proclame "programmeur" merite un petit retour sur ses bancs
d'ecole, section arithmetique elementaire...



Ou alors il a trop fait d'APL recemment. :-)



comme tu le fais justement remarquer un peu plus haut, les règles
d'associativité sont dépendantes du langage et donc je reste persuadé qu'un
programmeur qui est capable d'écrire des expressions commmes celles que
j'ai mentionné ci-dessus ne cherche pas à avoir du code facile à maintenir
(même dans plusieurs années) mais juste à montrer sa maîtrise du langage.

J'ai tellement vu de bugs juste parce qu'un programmeur maladroit, croyant
maitriser les subtilités d'un langage, préférait faire "pédant et
compliqué" alors qu'il aurait du faire "simple et clair". Le "obfuscated C
code contest" est une preuve de maitrise indéniable et une activité très
amusante, mais j'aurais de la peine à la recommander pour les vrais
programmes.



A+





--- news://freenews.netfront.net/ - complaints: ---
Jean-Marc Bourguet
Le #22544991
""
Jean-Marc Bourguet wrote:

> (Marc Espie) writes:
>
>> In article >> >> >Petit quizz : comment sont évaluées :
>> > a - b - c ?
>> > a / b / c ?
>> >
>> >P.S: à mon avis, un programmeur écrivant des expressions comme
>> >ci-dessus mérite un magistral coup de pied au cul !
>>
>> A mon avis, quelqu'un qui ne sait pas lire les expressions ci-dessus et
>> qui se proclame "programmeur" merite un petit retour sur ses bancs
>> d'ecole, section arithmetique elementaire...
>
> Ou alors il a trop fait d'APL recemment. :-)

comme tu le fais justement remarquer un peu plus haut, les règles
d'associativité sont dépendantes du langage et donc je reste persuadé qu'un
programmeur qui est capable d'écrire des expressions commmes celles que
j'ai mentionné ci-dessus ne cherche pas à avoir du code facile à maintenir
(même dans plusieurs années) mais juste à montrer sa maîtrise du langage.



Je suis plutot de l'avis de Marc, un programmeur qui a besoin de
parentheses sur ces expressions est incompetant dans ce langage. Ce n'est
pas une subtilite.

A+

--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Publicité
Poster une réponse
Anonyme