-1
votes

Comment l'opérateur ternaire utilise-t-il 3 opérandes?

Les opérateurs ternaires ressemblent à ceci xxx

mon professeur dit que les opérateurs ternaires utilisent 3 opérandes

qui sont ici M , A et B ... Même si m est en réalité la variable où nous stockons les données ...

mais lorsque nous écrivons xxx ici Nous écrivons également m comme variable de stockage alors pourquoi n'est-ce pas une déclaration ternaire?


8 commentaires

m n'est pas un opérande.


(A> B) est le premier opérande, A est seconde, B est troisième.


x? Y: z - 3 opérandes. x + y - 2 opérandes.


Mon professeur a dit que m est opérand


Dans m = A + B , vous avez réellement deux opérateurs, = et + , chacun avec deux opérandes.


En outre, le ?: ne fait pas une déclaration ternaire déclaration : c'est une expression .


? : est l'opérateur. + , - , * , / , % , ^ < / Code>, ! , etc. Tous les opérateurs . Opérateurs binaires tels que + fonctionne sur deux opérandes .


Si votre professeur dit que m est un opérande de l'opérateur ternaire, alors votre professeur se trompe.


4 Réponses :


4
votes

m n'est pas un opérande de l'un des deux opérateurs (l'opérateur conditionnel ternaire et l'opérateur + ) dont vous avez posé le nombre d'opérandes. C'est juste la variable deux que vous attribuez le résultat de ces deux opérateurs.

L'expression dans votre exemple est juste (a> b)? A: B et les opérandes sont (a> b) , a et b . .

in A + B , les opérandes sont A et B , il n'y a donc que deux opérandes.

Notez que ma réponse ne dit rien sur l'opérateur d'affectation = , que la question n'a pas posé de questions sur.


6 commentaires

M est un opérande du = Opérateur d'affectation. JLS 15.26. Opérateurs d'affectation : Le premier opérande d'un opérateur d'affectation doit être une variable.


? et : ne sont pas 2 opérateurs. C'est 1 opérateur avec 3 opérandes. JLS 15.25. Opérateur conditionnel ? : : L'opérateur conditionnel a trois expressions d'opérande.


@Andreas Ma réponse faisait référence à l'opérateur conditionnel ternaire et à l'opérateur + . Je ne parlais pas de l'opérateur = n'importe où. J'ai clarifié la réponse.


@Andreas je n'ai jamais écrit ça? et: sont 2 opérateurs. L'OP a demandé pourquoi l'opérateur conditionnel ternaire a 3 opérandes et l'opérande + ne le fait pas. Ce sont les 2 opérateurs que je faisais appelé.


Il n'était pas certain que les opérateurs que vous avez mentionnés et ne sont toujours pas assez clairs après votre édition. Il est trompeur lorsque la réponse commence " m n'est pas un opérande ..." , car m est très définitivement un opérande dans le code indiqué .


@Andreas Oui, si vous choisissez de lire simplement le début de la phrase, cela devient incorrect.



0
votes

Le mot opérandes ne fait pas référence à la variable utilisée, mais à la différence de l'opérateur ternaire. Ils sont

  • résultat1 sera renvoyé si la conférence est évaluée à true
  • condition1 la condition pour déterminer le résultat
  • résultat2 sera renvoyé si la conférence est évaluée à false xxx

    alors vous l'utilisez dans une impression ou enregistrez-la, mais cela ne fait pas partie de l'opérateur ternaire lui-même xxx < / pré>


0 commentaires

3
votes

Si vous regardez l'arbre de syntaxe abstrait de xxx

Ce serait quelque chose comme: xxx

Le "ternaire" fait référence à Le fait que conditionnelexpression a 3 enfants directs dans l'arborescence (l'arborescence parenthèse et les deux identifiants).

L'affectation est un arbre binaire, car il a deux enfants directs (l'identifiant et l'expression conditionnelle).

L'arborescence pour m = A + B; serait: xxx

à nouveau (et toujours), l'affectation est un opérateur binaire, avec deux enfants directs: l'identifiant et l'addition. L'ajout est un opérateur binaire distinct, avec deux enfants directs.


0 commentaires

0
votes

L'arité d'un opérateur est déterminée par le nombre d'opérandes / arguments. Il existe des opérateurs unia qui prennent un opérande comme i ++ (post-incrément), des opérateurs binaires tels que A + B qui prennent deux arguments, et il y a le ternaire / strong> opérateur a? B: C qui prend trois opérandes.

Les opérandes peuvent utiliser la même variable ou l'expression. Par exemple, dans l'expression a + a , l'opérateur + est toujours un opérateur binaire qui prend deux arguments - il faut juste le même argument deux fois.

m = est une affectation. L'opérateur d'affectation est également un opérateur binaire qui prend deux arguments. Sur le côté gauche, vous avez la cible de l'affectation, qui est la variable m dans votre cas et sur le côté droit, vous avez l'expression (complexe) qui donne la valeur.

Cela vous laisse avec (a> b)? A: B . Il y a encore trois opérandes - le conditionnel est (a> b) , le a est la expression vraie et le B < / code> est la false expression .

Cet opérateur est défini dans §15.25 des JLS :

L'opérateur conditionnel a trois expressions d'opérande . ? apparaît entre les première et seconde expressions et : apparaît entre les deuxième et troisième expressions.
(Mettre en surbrillance la mine).


0 commentaires