Operateurs en C
Résolu/Fermé
ithilus
Messages postés
6
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
29 juin 2010
-
Modifié par ithilus le 28/06/2010 à 23:23
ithilus Messages postés 6 Date d'inscription dimanche 9 mai 2010 Statut Membre Dernière intervention 29 juin 2010 - 29 juin 2010 à 15:00
ithilus Messages postés 6 Date d'inscription dimanche 9 mai 2010 Statut Membre Dernière intervention 29 juin 2010 - 29 juin 2010 à 15:00
A voir également:
- ++>
- Numero en 0806 quel opérateur - Guide
- Une autre operation est en cours dans google chrome ✓ - Forum Google Chrome
- Cette operation a ete annulé en raison de restriction sur cet ordinateur ✓ - Forum Windows
- Mettre opera en francais - Forum Logiciels
- Impossible d'effectuer l'opération en raison d'une erreur indéterminée illustrator - Forum Illustrator
4 réponses
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
Modifié par chuka le 28/06/2010 à 21:48
Modifié par chuka le 28/06/2010 à 21:48
Salut,
pour les operateurs || et &&, l'operande de droite n'est evaluée que si la connaissance de la valeur est indispensable pour le resultat...
typiquement:
Q = N++ > P || P++ != 3;
N++ > P-> vrai donc resultat de q sera vrai meme si l'expression ensuite est faux...donc P++ n'est pas effectué
Q = ++N == 3 && ++P == 3;
++N == 3 est faux donc le résultat sera faux quoiqu'il en soit...donc ++p n'est pas effectuée
@+
Ce n'est pas parce que certaines choses semblent inexplicables, qu'il faut faire semblant de les expliquer!
pour les operateurs || et &&, l'operande de droite n'est evaluée que si la connaissance de la valeur est indispensable pour le resultat...
typiquement:
Q = N++ > P || P++ != 3;
N++ > P-> vrai donc resultat de q sera vrai meme si l'expression ensuite est faux...donc P++ n'est pas effectué
Q = ++N == 3 && ++P == 3;
++N == 3 est faux donc le résultat sera faux quoiqu'il en soit...donc ++p n'est pas effectuée
@+
Ce n'est pas parce que certaines choses semblent inexplicables, qu'il faut faire semblant de les expliquer!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
28 juin 2010 à 21:56
28 juin 2010 à 21:56
Bonjour,
Chuka a donné je pense l'élément qui te manquait à la compréhension de l'affectation des valeurs.
Par contre, pour un cas, je ne suis pas d'accord avec la valeur.
Tu as mis : N=6, P=3, Q=0. S'agit-il d'une erreur de copier coller ?
Car le compilateur va évaluer : 6==3 qui est une valeur fausse. Dans un contexte de "et logique" (&&) le second opérateur ne sera pas évalué. Donc P ne sera pas incrémenté. Donc N=6, P=2, Q=0.
Si tu souhaites plus de précisions, n'hésite pas.
Cdlt,
Chuka a donné je pense l'élément qui te manquait à la compréhension de l'affectation des valeurs.
Par contre, pour un cas, je ne suis pas d'accord avec la valeur.
N = 5; P = 2; Q = ++N == 3 && ++P == 3; printf ("E : N=%d P=%d Q=%d\n", N, P, Q);//N=6, P=3, Q=0 au lieu de N=6, P=3, Q=0
Tu as mis : N=6, P=3, Q=0. S'agit-il d'une erreur de copier coller ?
Car le compilateur va évaluer : 6==3 qui est une valeur fausse. Dans un contexte de "et logique" (&&) le second opérateur ne sera pas évalué. Donc P ne sera pas incrémenté. Donc N=6, P=2, Q=0.
Si tu souhaites plus de précisions, n'hésite pas.
Cdlt,
ithilus
Messages postés
6
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
29 juin 2010
Modifié par ithilus le 28/06/2010 à 23:21
Modifié par ithilus le 28/06/2010 à 23:21
oups oui oui c'était bien une erreur de ma part de copier-collé... désolé, c'est modifié. merci!
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
354
28 juin 2010 à 21:10
28 juin 2010 à 21:10
#include <stdio.h> main() { int N=10, P=5, Q=10, R; char C='S'; N = 5; P = 2; Q = N++ > P || P++ != 3; // 5>2 donc Q est vrai=1 /*N est ensuite incrémenté de 1, donc N vaut 6 L'expression est évaluée de droite à gauche c'est vrai qu'ici je sèche, il vaut mieux mettre les parenthèses !*/ printf ("C : N=%d P=%d Q=%d\n", N, P, Q);//N=6, P=2, Q=1, au lieu de N=6, P=3, Q=1 N = 5; P = 2; Q = N++ < P || P++ != 3; /*5<2 faux; 2!=3 vrai donc Q est vrai La valeur de P++ est celle de P avant l'incrémentation*/ printf ("D : N=%d P=%d Q=%d\n", N, P, Q);//N=6, P=3, Q=1 au lieu de N=6, P=3, Q=0 N = 5; P = 2; Q = ++N == 3 && ++P == 3; printf ("E : N=%d P=%d Q=%d\n", N, P, Q);//N=6, P=3, Q=0 au lieu de N=6, P=3, Q=0 /*Là tu es d'accord*/ N=5; P=2; Q = ++N == 6 && ++P == 3; printf ("F : N=%d P=%d Q=%d\n", N, P, Q);//N=6, P=3, Q=1 au lieu de N=6, P=3, Q=1 return 0; }
ithilus
Messages postés
6
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
29 juin 2010
28 juin 2010 à 23:23
28 juin 2010 à 23:23
oui j'ai laissé quelques coquilles, je m'en excuse. En tout cas merci pour votre aide!
ithilus
Messages postés
6
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
29 juin 2010
Modifié par ithilus le 28/06/2010 à 23:36
Modifié par ithilus le 28/06/2010 à 23:36
C'est tout bon pour les valeurs de P, merci à vous! Par contre, je sèche toujours sur sur la valeur de Q ici:
sa devrait faire:
6<2 faux, donc il évalue la deuxième condition, puisque c'est la valeur de celle-ci qui déterminera la valeur de Q
3!=3 faux
faux ou faux, donc Q devrait valoir 0?
Or, Q=1 à l'affichage. Ou est-ce que je me trompe?
N = 5; P = 2; Q = N++ < P || P++ != 3; printf ("D : N=%d P=%d Q=%d\n", N, P, Q);//N=6, P=3, Q=1 au lieu de N=6, P=3, Q=0
sa devrait faire:
6<2 faux, donc il évalue la deuxième condition, puisque c'est la valeur de celle-ci qui déterminera la valeur de Q
3!=3 faux
faux ou faux, donc Q devrait valoir 0?
Or, Q=1 à l'affichage. Ou est-ce que je me trompe?
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
29 juin 2010 à 07:51
29 juin 2010 à 07:51
Q = N++ < P || P++ != 3;
=>5<2||2!=3 car N et P sont post incrémentée; pour N (N++ < P) N aura la valeur 6 apres l'instruction (N< P) , de meme pour P (P++ != 3) qui aura la valeur 3 apres l'instruction P != 3 ....donc ici 2!=3 est vrai..Faux ou Vrai=Vrai
par contre si tu avais
Q = ++N < P ||++ P != 3;=>6<2||3!=3 pre-incrementation, le resultat serait different!!;)
@+
=>5<2||2!=3 car N et P sont post incrémentée; pour N (N++ < P) N aura la valeur 6 apres l'instruction (N< P) , de meme pour P (P++ != 3) qui aura la valeur 3 apres l'instruction P != 3 ....donc ici 2!=3 est vrai..Faux ou Vrai=Vrai
par contre si tu avais
Q = ++N < P ||++ P != 3;=>6<2||3!=3 pre-incrementation, le resultat serait different!!;)
@+
ithilus
Messages postés
6
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
29 juin 2010
29 juin 2010 à 15:00
29 juin 2010 à 15:00
C'est très clair encore une fois merci! Sa faisait un moment que je tombais sur ces histoires de post et pré incrémentation et je n'avais jamais compris la différence.
Modifié par ithilus le 28/06/2010 à 23:25
Sa veut donc dire, par exemple, que dans le cas d'un ou exclusif, la deuxième valeur sera toujours évaluée ? Pour vérifier si j'ai bien compris.