int a=8, b=10,c=2,d; d= ++a && ++b || ++b; In the above code , how do I know if (++a), (++b) are true or false . I know true is 1 and false is 0. But I canât understand how to determine if these expressions are true or false . Please help.
4 Réponses :
en C, C ++ et de nombreuses autres langages de programmation, pour les entiers, 0 est considéré comme faux et tout autre entier (y compris les nombres négatifs) est vrai. Donc ici, je sera évalué à true p>
Etant donné que Etant donné que Par conséquent, 0 code> est faux, toute valeur non nulle est vraie. Donc, il vous suffit de déterminer si ++ a code> et ++ b code> est zéro ou pas zéro. P>
A code> est initialement 8 code>, ++ a code> est 9 code>, qui n'est pas zéro, donc C'est vrai. P>
B code> est initialement 10 code>, ++ b code> est 11 code>, qui n'est pas zéro, donc C'est vrai. P>
9 && 11 code> est vrai parce que les deux opérandes sont vraies. P>
|| code> n'évalue que le deuxième opérande si le premier opérande est faux. Donc, le second ++ b code> c'est-à-dire jamais exécuté. La valeur de vrai || tout code> est true code>. p>
d code> sera défini sur true, ce qui est 1 code>. p>
dans 'c' Nous savons que le vrai est "1" et faux est "0" afin que l'expression supérieure sera vraie car les deux expressions sont non nulles. Et si vous souhaitez imprimer des valeurs réelles telles que true et false, je pense que vous devriez essayer de sortir printf ("% s", x? "vrai": "Faux"); P>
in c, opérateurs logiques ( sur la base de la priorité de l'opérateur (opérateur Notez que logique logique Donc, dans l'expression donnée, le côté gauche de && code>, || code>, ! code>, etc.) suppose que zéro est faux code> et toutes les autres valeurs sont true code>. && code> est supérieur à || code> opérateur), L'expression sera évaluée comme suit: p> et code> opération expr1 && expr2 code> utilise un comportement à court-circuit. Avec un court-circuit logique, le deuxième opérande, expr2 code> est évalué uniquement lorsque le résultat n'est pas complètement déterminé par le premier opérande, expr1 code>.
C'est-à-dire que expr2 code> n'est pas évalué si expr1 code> est logique 0 code> (false). P> ++ a code> aboutira à 9 code>, une valeur non nulle, par conséquent, entraîne des résultats true code>, de sorte d'opérande latéral à droite de && code> opérateur, qui est ++ b code>, sera évalué.
++ B CODE> entraînera un 11 code>, une valeur non nulle, par conséquent, donne des résultats true code>. p> True && true code> aboutira à true code>. p> ou code> opération expr1 || EXPR2 code> utilise un comportement de court-circuit. C'est-à-dire que expr2 code> est pas strud> évalué si expr1 code> est logique 1 code> (vrai). P> || code> est évalué comme true code> d'où le côté droit de l'opérande de || code> , qui est ++ b code>, ne sera pas évalué et le résultat de l'expression entière sera vrai code>. Par conséquent, la valeur de d code> sera 1 code>. P> p>
Cela peut aider à penser en termes de "faux" et "non faux" -
1 code> est une seule des valeurs "non fausses". Les résultats des deux++ A code> et++ b code> sont non nuls, donc les deux sont "non faux".