0
votes

Concernant logique et opérateur

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.
c

1 commentaires

Cela peut aider à penser en termes de "faux" et "non faux" - 1 est une seule des valeurs "non fausses". Les résultats des deux ++ A et ++ b sont non nuls, donc les deux sont "non faux".


4 Réponses :


1
votes

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


0 commentaires

4
votes

0 est faux, toute valeur non nulle est vraie. Donc, il vous suffit de déterminer si ++ a et ++ b est zéro ou pas zéro.

Etant donné que A est initialement 8 , ++ a est 9 , qui n'est pas zéro, donc C'est vrai.

Etant donné que B est initialement 10 , ++ b est 11 , qui n'est pas zéro, donc C'est vrai.

9 && 11 est vrai parce que les deux opérandes sont vraies.

|| n'évalue que le deuxième opérande si le premier opérande est faux. Donc, le second ++ b c'est-à-dire jamais exécuté. La valeur de vrai || tout est true .

Par conséquent, d sera défini sur true, ce qui est 1 .


0 commentaires

0
votes

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");


0 commentaires

3
votes

in c, opérateurs logiques ( && , || , ! , etc.) suppose que zéro est faux et toutes les autres valeurs sont true .

sur la base de la priorité de l'opérateur (opérateur && est supérieur à || opérateur), L'expression sera évaluée comme suit: xxx

Notez que logique et opération expr1 && expr2 utilise un comportement à court-circuit. Avec un court-circuit logique, le deuxième opérande, expr2 est évalué uniquement lorsque le résultat n'est pas complètement déterminé par le premier opérande, expr1 . C'est-à-dire que expr2 n'est pas évalué si expr1 est logique 0 (false).

++ a aboutira à 9 , une valeur non nulle, par conséquent, entraîne des résultats true , de sorte d'opérande latéral à droite de && opérateur, qui est ++ b , sera évalué.
++ B entraînera un 11 , une valeur non nulle, par conséquent, donne des résultats true .

True && true aboutira à true .

logique ou opération expr1 || EXPR2 utilise un comportement de court-circuit. C'est-à-dire que expr2 est pas évalué si expr1 est logique 1 (vrai).

Donc, dans l'expression donnée, le côté gauche de || est évalué comme true d'où le côté droit de l'opérande de || , qui est ++ b , ne sera pas évalué et le résultat de l'expression entière sera vrai . Par conséquent, la valeur de d sera 1 .


0 commentaires