Para el siguiente fragmento de código consigo la salida como 1
. Quiero saber cómo llegó?Prioridad de los operadores - evaluación de expresiones
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
Para el siguiente fragmento de código consigo la salida como 1
. Quiero saber cómo llegó?Prioridad de los operadores - evaluación de expresiones
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
i=x<y<z;
, consigue interpretar como i=(x<y)<z
, que a su vez consigue interpretar como i=1<z
, que evalúa a 1.
Esto se debe a que su código se evalúa como:
void main()
{
int x=10,y=20,z=5,i;
i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
printf("%d",i);
}
¿Cómo se puede cambiar el código y hablar acerca de la evaluación? – Sadique
puse apoyos para ilustrar cómo compilador de código interpretado –
lo que hizo que la salida ¿querer?
En C,
i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.
Si la condición se evalúa como falsa, el valor devuelto es 0, y 1 en caso contrario.
También, x < y < z será evaluado como ((x < y) < z).
10 es menos de 20, lo que resulta en 1 y 1 es menor que 5, lo que resulta en 1. C no encadena operadores relacionales como hacen otros idiomas.
x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1
opera como sigue: Desde <
es una expresión lógica, x<y
es decir 10<20
es cierto es decir 1. Por lo tanto, se convierte en 1<z
es decir 1<5
que de nuevo es verdadero es decir, 1 que se asigna a i
. Así es i
1.
C++ no admite comparaciones múltiples piezas por el estilo.
x < y < z
se interpreta como
(x < y) < z
o es decir, determinar si x < y
, luego ver si que boolean es menor que z
.
Hay un poco de discusión en por qué que es over at the software engineering StackExchange.
Cuando usted se encuentra tratando de hacer esto, en lugar que necesita para escribir como dos comparaciones separadas unidas por un valor lógico:
(x < y) && (y < z)
Parece ser un error bastante común, al menos GCC (probablemente otros compiladores, también) imprime una advertencia, si las advertencias se habilitan: 'advertencia: las comparaciones como 'X <= S < = Z' no tienen su meaning' matemática – Saytonurn