C | Operadores | Pregunta 10

¿Cuál es la salida del siguiente programa?

#include <stdio.h>
  
int main()
{
   int a = 1;
   int b = 1;
   int c = a || --b;
   int d = a-- && --b;
   printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d);
   return 0;
}

(A) a = 0, b = 1, c = 1, d = 0
(B) a = 0, b = 0, c = 1, d = 0

(C) a = 1, b = 1, c = 1, d = 1
(D) a = 0, b = 0, c = 0, d = 0

Respuesta: (B)
Explicación: Entendamos la línea de ejecución por línea.
Los valores iniciales de a y b son 1.

   // Since a is 1, the expression --b 
   // is not executed because
   // of the short-circuit property 
   // of logical or operator
   // So c becomes 1, a and b remain 1
   int c = a || --b;

   // The post decrement operator -- 
   // returns the old value in current expression 
   // and then updates the value. So the 
   // value of expression a-- is 1.  Since the 
   // first operand of logical and is 1, 
   // shortcircuiting doesn't happen here.  So 
   // the expression --b is executed and --b 
   // returns 0 because it is pre-increment.
   // The values of a and b become 0, and 
   // the value of d also becomes 0.
   int d = a-- && --b;

Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *