Evaluación de cortocircuito con && || operador

1 minuto de lectura

Evaluacion de cortocircuito con operador
usuario3126632

Sé lo que es la evaluación de cortocircuitos en C.

a && b (el operando b no se verifica si a = 0)

a || b (el operando b no se verifica si a = distinto de cero)

Pero estoy atascado en esta pregunta.

int x = 0;
if (5 || 2 && ++x)
    printf("%d", x);

Esto produce 0.

Mi primer pensamiento es el siguiente:

Según la tabla de precedencia, la precedencia es ++, &&, || (orden descendiente)

  1. ++x: evaluated.x se convierte en 1

  2. 2 && ++x evaluado. Se evalúan ambos operandos.

  3. || se evalúa.

Pero de acuerdo con esto, 1 debe imprimirse, no 0.

Mi segundo pensamiento es así:

5 || anything

anything no se evalúa debido a la evaluación de cortocircuito, por lo que aquí no entra en juego ninguna precedencia.

1647732969 35 Evaluacion de cortocircuito con operador
Himanshu

La expresion 5 || 2 && ++x es equivalente a 5 || (2 && ++x) debido a la precedencia del operador.

El tiempo de ejecución evalúa la expresión. 5 || 2 && ++x de izquierda a derecha.

Como sabemos en O si la primera condición es verdadera, no verificará la segunda condición.
Así que aquí 5 evaluado como verdadero y así (2 && ++x) no se realizará.

Es por eso que x seguirá siendo 0 aquí.

Correcto. La expresión está cortocircuitada. Puedes probarlo con esto.

if(5 || ++x) {
  printf("%d\n",x);
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad