52 votes

Que signifie y - = m <3?

En parcourant un exemple de code C, je suis tombé sur ceci:

 y -= m < 3;
 

Qu'est-ce que cela fait? Est-ce une sorte de condensé pour la boucle ou quelque chose? Il est impossible de rechercher sur Google pour autant que je sache.

75voto

Wei Shi Points 1836

m < 3 est 1 ou 0 , selon la valeur de vérité.

So y=y-1 lorsque m<3 est true , ou y=y-0 lorsque m>=3

25voto

Jasarien Points 35353

Si vous les décomposez par ordre de priorité pour chaque opération, vous obtenez:

 y = (y - (m < 3));
 

m < 3 est évalué et renvoie un résultat booléen 1 ou 0 , afin que l'expression puisse être simplifiée

 y = y - 1; // if m < 3 is true
 

ou

 y = y - 0; // if m < 3 is false
 

Cela a pour but d'éviter une clause if .

14voto

Steve Jessop Points 166970

I signifie if (m < 3) { y -=1; } , puisque (m < 3) est 1 si m est inférieur à 3, 0 sinon.

Le code apparaît dans une ancienne implémentation de référence ancienne des années bissextiles ou de Pâques, voire des deux: les deux premiers mois de janvier et février sont spéciaux car ils se produisent avant le jour bissextile. Il n'y a pas vraiment d'excuse pour écrire un code comme ça, à moins que vous n'aimiez vraiment son apparence. La plupart des gens ne le font pas.

10voto

AttishOculus Points 840

m < 3 évalué à 1 si m est inférieur à 3. Par conséquent, y est diminué de un dans ce cas. Ainsi, une déclaration if évitée.

2voto

James Webster Points 16663

Je ne peux pas dire que vous voulez qu'il est pour, mais je peux vous dire ce qu'il fait:

m < 3 renvoie un int de 0 ou 1 représentant une valeur booléenne.

si m est inférieur à 3, la déclaration est évaluée comme suit: y -= 1 ou y = y - 1 ;

si m est supérieur ou égal à 3, la déclaration est évaluée comme y -= 0 ou y = y - 0 . Globalement, dans ce cas, la déclaration ne fait rien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: