Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Priorité des opérateurs logiques

20 réponses
Avatar
David Côme
Bonjour à tous.
J'ai la norme sous les yeux et je n'arrive pas à trouver un paragraphe sur
la priorité des opérateurs logique, en particulier sur && et ||.
J'ai bien trouvé page 63 la note 53 disant "The precedence of operators is
not directly specified, but it can be derived from the syntax."
mais ca ne m'avance pas pour savoir lequel est prioritaire sur l'autre ou
si au contraire ils ont tout les deux la même priorité (ce que j'ai
toujours pensé).

Merci beaucoup pour vos réponses.
David Côme.

10 réponses

1 2
Avatar
Jean-Marc Bourguet
David Côme writes:

Bonjour à tous.
J'ai la norme sous les yeux et je n'arrive pas à trouver un paragraphe sur
la priorité des opérateurs logique, en particulier sur && et ||.
J'ai bien trouvé page 63 la note 53 disant "The precedence of operators is
not directly specified, but it can be derived from the syntax."
mais ca ne m'avance pas pour savoir lequel est prioritaire sur l'autre ou
si au contraire ils ont tout les deux la même priorité (ce que j'ai
toujours pensé).



logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

Donc || a priorite sur && puisque la grammaire dit que les arguments de ||
c'est des logical-AND-expression.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
David Côme
On Tue, 26 Aug 2008 11:29:16 +0200, Jean-Marc Bourguet
wrote:

David Côme writes:

Bonjour à tous.
J'ai la norme sous les yeux et je n'arrive pas à trouver un paragraphe
sur
la priorité des opérateurs logique, en particulier sur && et ||.
J'ai bien trouvé page 63 la note 53 disant "The precedence of operators
is
not directly specified, but it can be derived from the syntax."
mais ca ne m'avance pas pour savoir lequel est prioritaire sur l'autre
ou
si au contraire ils ont tout les deux la même priorité (ce que j'ai
toujours pensé).



logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

Donc || a priorite sur && puisque la grammaire dit que les arguments de
||
c'est des logical-AND-expression.




Ok, merci beaucoup.
Avatar
espie
In article ,
Jean-Marc Bourguet wrote:
logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

Donc || a priorite sur && puisque la grammaire dit que les arguments de ||
c'est des logical-AND-expression.



Generalement, on dit le contraire a partir de ce bout de grammaire.
Je ne sais pas si tu t'es trompe, ou si tu t'exprimes a l'envers, je
presume le 2e.


Enfin bon, pour etre sur.

Si on a

a && b || c && d

ca marche comme si c'etait parenthese
(a && b) || (c && d)
Avatar
espie
In article <g90kbr$1v29$,
Marc Espie wrote:
Si on a

a && b || c && d

ca marche comme si c'etait parenthese
(a && b) || (c && d)



Une facon mnemotechnique de s'en souvenir (qui marche pour moi),
c'est de voir le && comme une sorte de produit logique
(ca ne marche que si les 2 conditions sont remplies) et le ou comme
une sorte d'addition logique (l'un ou l'autre, ca marche deux fois
plus souvent).

Si on a un langage qui met les deux operations sur des niveaux de
priorites differents, il les classe donc en fonction.

... meme si, oui, en fait, les regles d'algebre de boole sont parfaitement
symetriques, et que la negation est un isomorphisme de (bool, &&, ||) sur
(bool, ||, &&).
Avatar
Jean-Marc Bourguet
(Marc Espie) writes:

In article ,
Jean-Marc Bourguet wrote:
>logical-AND-expression:
> inclusive-OR-expression
> logical-AND-expression && inclusive-OR-expression
>
>logical-OR-expression:
> logical-AND-expression
> logical-OR-expression || logical-AND-expression
>
>Donc || a priorite sur && puisque la grammaire dit que les arguments de ||
>c'est des logical-AND-expression.

Generalement, on dit le contraire a partir de ce bout de grammaire.
Je ne sais pas si tu t'es trompe, ou si tu t'exprimes a l'envers, je
presume le 2e.



Un peu des deux, je me suis exprime a l'envers (je savais que les &&
s'effectuent avant), mais involontairement (je sais ce qu'etre plus
prioritaire veut dire).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Jean-Marc Bourguet
(Marc Espie) writes:

In article <g90kbr$1v29$,
Marc Espie wrote:
>Si on a
>
>a && b || c && d
>
>ca marche comme si c'etait parenthese
>(a && b) || (c && d)

Une facon mnemotechnique de s'en souvenir (qui marche pour moi),
c'est de voir le && comme une sorte de produit logique
(ca ne marche que si les 2 conditions sont remplies) et le ou comme
une sorte d'addition logique (l'un ou l'autre, ca marche deux fois
plus souvent).



C'est comme ca que je retiens aussi (0 = false, 0 != true et on a la table
correcte).

Si on a un langage qui met les deux operations sur des niveaux de
priorites differents, il les classe donc en fonction.

... meme si, oui, en fait, les regles d'algebre de boole sont parfaitement
symetriques, et que la negation est un isomorphisme de (bool, &&, ||) sur
(bool, ||, &&).



Ada a les operateurs correspondant de meme priorite mais non associatif
entre eux, donc si tu veux les combiner, tu dois mettre des parentheses.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
espie
In article ,
Jean-Marc Bourguet wrote:
Ada a les operateurs correspondant de meme priorite mais non associatif
entre eux, donc si tu veux les combiner, tu dois mettre des parentheses.



Le bourne-shell oublie de mettre des priorites, et les parentheses ont
une semantique tres speciale, ce qui fait que c'est pas super-simple
d'emploi et pas mega-lisible.

(mais bon, c'est moins grave que pascal et l'absence de court-circuit
qui empeche d'utiliser les operateurs logiques pour faire des gardes)
Avatar
Wykaaa
David Côme a écrit :
Bonjour à tous.
J'ai la norme sous les yeux et je n'arrive pas à trouver un paragraphe
sur la priorité des opérateurs logique, en particulier sur && et ||.
J'ai bien trouvé page 63 la note 53 disant "The precedence of operators
is not directly specified, but it can be derived from the syntax."
mais ca ne m'avance pas pour savoir lequel est prioritaire sur l'autre
ou si au contraire ils ont tout les deux la même priorité (ce que j'ai
toujours pensé).

Merci beaucoup pour vos réponses.
David Côme.



Quand on veut faire des programmes de qualité, fiables, lisibles,etc.,
pour toutes ces "choses" on met les parenthèses qui vont bien sans se
prendre la tête avec la norme qui est tout sauf pédagogique (elle n'est
pas faite pour cela).
Avatar
David Côme
On Wed, 27 Aug 2008 18:49:00 +0200, Wykaaa wrote:

Quand on veut faire des programmes de qualité, fiables, lisibles,etc.,
pour toutes ces "choses" on met les parenthèses qui vont bien sans se
prendre la tête avec la norme qui est tout sauf pédagogique (elle n'est
pas faite pour cela).




Ce n'est pas pour mes programmes, mais pour avoir des arguments dans un
débat. Car ma version g++ (4.3.1) émet un warning comme quoi il manque des
(), ce que je trouve normal mais ce qui choque mon interlocuteur.
Avatar
Wykaaa
David Côme a écrit :
On Wed, 27 Aug 2008 18:49:00 +0200, Wykaaa wrote:

Quand on veut faire des programmes de qualité, fiables, lisibles,etc.,
pour toutes ces "choses" on met les parenthèses qui vont bien sans se
prendre la tête avec la norme qui est tout sauf pédagogique (elle
n'est pas faite pour cela).




Ce n'est pas pour mes programmes, mais pour avoir des arguments dans un
débat. Car ma version g++ (4.3.1) émet un warning comme quoi il manque
des (), ce que je trouve normal mais ce qui choque mon interlocuteur.



OK, mais finalement g++ apporte de l'eau à mon moulin :-)
1 2