No entiendo la salida del siguiente programa:Explicar un conflicto aparente entre la precedencia de && y || y el resultado real de una expresión
#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d %d %d %d\n", i, j, k, m);
return 0;
}
La salida es -2 2 0 1
en lugar de -2 3 1 1
, lo que implica que se evaluó ++i
(e hizo que el operador de corto a ||
circule su lado derecho) antes de la expresión ++j && ++k
que parece contradecir el hecho de que el operador &&
tiene una precedencia mayor que ||
.
¿Alguien podría explicar por qué?
¿Cuál es el tipo de m? –
m es un número entero de tipo Sé que el anwer ... necesito explicación qué es k = 0 – anurag
'' J' y K' Nunca se incrementa debido a que parte de la expresión está en cortocircuito. '++ i' es verdadero, por lo que el resto de la expresión no se evalúa. –