2017-06-13 1 views
4
a+=b>=300?b=100:a==100; 

Si a et b sont initialisés à 100 et 200 respectivement, quelles seront les valeurs de a et b après l'exécution de l'opérateur ternaire? La réponse est a=101, b=200.Expression utilisant l'opérateur ternaire

Comment est-ce possible?

+0

Est-ce ce devoir? Juste curieux. –

+1

Il peut s'agir de devoirs, mais la question ne porte pas sur le résultat, mais un appel à l'explication. – chqrlie

Répondre

3

Il suffit d'ajouter quelques parenthèses et des espaces pour le rendre plus lisible et il devrait être évident: (. Référez à un C operator precedence table pour voir pourquoi les parenthèses peuvent être placés là où ils sont dans l'expression ci-dessus)

a += ((b >= 300) ? (b = 100) : (a == 100)); 

donc, ce qui est essentiellement juste:

a += 1; 
1

L'opérateur conditionnel n'a rien à voir avec elle, au fond, il ajoute juste du désordre ici. Votre programme est équivalent à a += a==100. Ce qui donne a += 1, puisque le résultat de == est un booléen 1 = vrai.

1

d'abord ajouter des espaces pour faire cette expression de déclaration plus facile à analyser visuellement:

a += b >= 300 ? b = 100 : a == 100; 

parse Ensuite, selon la grammaire C (ce qui est légèrement différent de la java ou javascript grammaires dans ce cas particulier):

a += 
     (b >= 300) ? 
      b = 100 : 
      a == 100 
     ; 

Depuis b = 200, le test b >= 300 est évaluée à false et la première branche de l'opérateur ternaire est pas évalué, mais le second Branc h est et a == 100 évalue à 1 comme a est en effet égal à 100. Le résultat de l'opérateur ternaire, 1, est ajouté à a, d'où la nouvelle valeur pour a est 101. b est inchangé.