int i = 5, j = 10, k = 1;
printf("%d\n", k > i < j);
Pourquoi est-ce qu'il imprime 1?printf avec des signes relationnels
int i = 5, j = 10, k = 1;
printf("%d\n", k > i < j);
Pourquoi est-ce qu'il imprime 1?printf avec des signes relationnels
D'abord, vous devez déterminer dans quel ordre les opérations sont évaluées. Utilisez la colonne associativité de this table pour obtenir de l'aide. Ensuite, comprendre quelle est la valeur de k > i
. Utilisez printf
pour l'essayer. Enfin, calculez la valeur de la dernière expression et exécutez le programme pour voir si votre réponse est correcte.
k > i < j
est une expression, et elle sera évaluée complètement avant que printf
ne soit appelée; tout printf
verra est le résultat de l'évaluation. Quant à ce qu'il évalue, les opérateurs sont simplement évalués individuellement de droite à gauche; si k > i
sera évalué en premier, suivi par le résultat de celui appliqué à <
avec j
sur le côté droit. Notez que cela pourrait aller différemment si nous avions d'autres opérateurs que <
et >
; ceux-ci ont le même niveau de préséance, de sorte qu'ils sont toujours évalués de gauche à droite. Si, d'autre part, nous avions k + i * j
, i * j
serait évalué en premier. C'est parce que *
a une priorité supérieure à +
.
Donc je peux supposer qu'il renvoie 0 ou 1 parce que c'est juste une évaluation vrai/faux? – udjat
@ChuhanFrankQin, Oui, les deux '' <' and '> retour toujours soit 0 ou 1, car ils sont des opérateurs booléens. – jrajav
Merci beaucoup! Je réalise maintenant à quel point ma question était stupide .. – udjat
Espérons qu'il imprimerait rien du tout, comme quelque chose aussi confus que cela devrait être illégal. Cependant, si nous devons absolument le faire:
k > i < j
serait divisé en deux parties: k > i
, puis le résultat de cela est comparé à j
. Le résultat d'une comparaison comme ceci est 1 si true
ou 0 si false
. Puisque k > i
est false
, nous obtenons 0; puis 0 < j
est true
donc nous obtenons 1. Par conséquent, cela va imprimer 1.
Merci la table aide beaucoup! – udjat