statement sobrecarga operator cppreference c++ c if-statement comparison-operators

sobrecarga - operator() c++



Encadenamiento matemático del operador de comparación-como en "if((5<j<= 1))" (4)

Su pregunta está un poco rota, pero creo que lo siguiente aclarará lo que está pasando para usted:

En C, 1 < j <= 5 significa lo mismo que (1 < j) <= 5 . Y el valor de 1 < j es 0 o 1 dependiendo de si es menor o igual que 1 o estrictamente mayor que 1. Entonces, esto es lo que sucede para unos pocos valores de j en su código:

Si j == 0 , esta expresión es (1 < 0) <= 5 , que se reduce a 0 <= 5 (porque 1 < 0 es falso). Esta es una verdadera expresión. Tu programa muestra "sí".

Si j == 3 , esta expresión es (1 < 3) <= 5 , que se reduce a 1 <= 5 (porque 1 < 3 es verdadero). Esta es una verdadera expresión. Tu programa muestra "sí".

Si j == 6 , esta expresión es (1 < 6) <= 5 , que se reduce a 1 <= 5 (porque 1 < 6 es verdadero). Esta es una verdadera expresión. Tu programa muestra "sí".

En todos los casos, su programa emite "sí" porque 1 < j es 0 o 1, y de cualquier manera es menor que 5.

Lo que debería haber usado es 1 < j && j <= 5 .

Esta pregunta ya tiene una respuesta aquí:

int j=42; if( (5<j<=1) ) { printf("yes"); } else { printf("no"); }

Salida:

yes

¿Por qué produce yes?
¿No es la condición solo mitad verdadera?


lo que quiere escribir es if ( 1 < j && j <= 5 )

lo que está sucediendo en tu caso es: if ( 1 < j <=5 )
1 < j se evalúa primero, y es verdadero, por lo que se evalúa a 1 y su condición se vuelve
if (1 <=5) , que también es verdadero así que printf("yes"); se excuta



C no entiende la sintaxis matemática, entonces

if(1<j<=5)

no se interpreta como espera y quiere; debería ser

if (1 < j && j <= 5)

o similar.

Como se explica en otras respuestas, la expresión se evalúa como

((1 < j) <= 5) => ("true" <= 5) => "true"

donde "verdadero" (valor booleano) se convierte implícitamente en 1, como explaneid por ejemplo aquí , con referencias a estándares también, y esto explica por qué "verdadero" tiene que ser "menor que" 5 (aunque en C podría no ser totalmente correcto hablar sobre "conversión implícita de bool a int")