2011-08-10 4 views
1

Confus au sujet de la condition if, comment exécute-t-il les instructions suivantes.Confus au sujet de la condition CPP

if(1 && (1 || 0) != 0) or if(1 || (1 && 0) != 0) 

Dans l'instruction if ci-dessus, quelle est la séquence d'exécution/de validation des instructions.
(de gauche à droite ou de droite à gauche) si de gauche à droite, alors si le premier argument/expression est vrai, évalue-t-il la 2ème expression/argument? est-ce vrai pour les deux opérateurs logiques AND et OR?

Merci.

Répondre

4

circuits logiques && court si le premier opérande est évaluée à false (parce que false && x est false pour tout x)

logiques || circuits courts si le premier opérande est évaluée à true (parce que true || x est true pour tout x)

Ils évaluent tous les deux de gauche à droite.

+0

Je note également que '! =' A une priorité supérieure à la fois '&&' et '||' et donc la différence est calculée * avant * d'appliquer soit '&&' ou '||' au résultat. –

+0

Merci pour l'explication – psp1

1

Il ne reste plus à droite

  1. exécute d'abord 1. exécute ensuite (1 || 0) != 0. Pour ce faire, il exécute 1 || 0 -> vrai, donc tout est vrai.
  2. Première exécution 1 - c'est vrai, donc il court-circuite et retourne vrai.
0

C'est de gauche à droite. || court-circuit si la première expression est vraie, & & si la première expression est fausse.

0

Les deux choses sont fondamentalement différentes vont lire D Morgans Lois s

0

permet de décomposer étape par étape:

(1 || 0) devient true comme 1 court-circuite l'expression

donc (1 || 0) != 0 est true

1 && true est vrai par la définition du 0 logique& opérateur

or est une définition/mot-clé pour || mais la première partie est déjà vrai, nous avons donc court-circuiter l'expression à nouveau et le code à l'intérieur du bloc if est exécuté.