J'essaie d'établir l'égalité de trois variables égales, mais le code suivant n'imprime pas la réponse correcte évidente qu'il devrait imprimer. Quelqu'un peut-il expliquer, comment le compilateur analyse le sortie: p> si (condition) code> interne?
if ( (i==j) == (j==k))
4 Réponses :
if ( (false) == (false) )
@Manav, Non. Utilisez && entre les conditionnels.
Il est « bien » mais il n'a pas de sens. Cela dit "si l'égalité de i code> et
j code> est le même que l'égalité de
j code> et
k code>." Tous les trois étant différents, il serait vrai. Vous voulez
&& code>, ce qui signifie et.
Non. (I == J) == (j == k) équivaut à (i == j) ^ (j == k). Ce qui signifie qu'il sera vrai si j'étais == j et j == k ou si je! = j et j! = k. Parce que (i == j) renvoie une valeur vraie ou fausse.
@Surdin, ils ne sont pas équivalents, ils sont en fait tout à fait opposés (et seulement si j'ignore les types des résultats).
Vous devez séparer les opérations:
if ( i == j && i == k)
J'aurais hébergé l'avertissement du compilateur et l'écrire comme (i == j) && (j == k) code>. Il faut plus de temps pour écrire mais cela signifie la même chose et n'est pas susceptible de faire se plaindre du compilateur. P>
Juste pour être difficile, le compilateur est en fait un avertissement que vous êtes comparer une comparaison i>.
Bien que ce soit évidemment la signification manav voulue, ce n'est pas le changement que le compilateur a suggéré. L'attention de l'avertissement du compilateur vous donnerait ce code: (i == j) == k code>.
VRAI: Bien que le compilateur ait dit suggère des parenthèses autour de la comparaison dans l'opérande de '==' code> mais car cela n'a pas spécifié "== ', je viens de parent les deux! ;)
Plus important encore, il fait la bonne chose, tandis que i == j == k code> ne le fait pas.
expression est analysé comme p> de sorte que vous comparez Vous avez besoin d'expression i code> à
j < / code> et obtenir
vrai code>. Que vous comparez
true code> à
123 code>.
true code> est converti en entier comme
1 code>. On n'est pas égal
123 code>, donc l'expression est false. P>
i == j && j == k code> p> p> < / p>
Vous avez besoin ((i == j) && (j == k))
Vos tests d'édition Si
i == j code> a la même valeur que
j == k code>. Que se passe-t-il pour
i = 1 code>,
j = 2 code>,
k = 3 code>? Ne devinez pas, essayez de le comprendre: par exemple, quelle est la valeur de
1 == 2 code>?
Prise en charge de la langue pour les opérateurs de comparaison chaînées (x