Salida del programa C | Conjunto 28

Prediga la salida del siguiente programa en C.

Pregunta 1

#include <stdio.h>
  
int main()
{
    char a = 30;
    char b = 40;
    char c = 10;
    char d = (a * b) / c;
    printf ("%d ", d);
  
    return 0;
}

A primera vista, la expresión (a*b)/c parece causar un desbordamiento aritmético porque los caracteres firmados solo pueden tener valores de -128 a 127 (en la mayoría de los compiladores de C), y el valor de la subexpresión ‘(a*b) ‘ es 1200. Por ejemplo, el siguiente fragmento de código imprime -80 en una máquina Little Endian de 32 bits.

    char d = 1200;
    printf ("%d ", d);

El desbordamiento aritmético no ocurre en el programa original y la salida del programa es 120. En C, char y short se convierten a int para cálculos aritméticos. Entonces, en la expresión ‘(a*b)/c’, a, b y c se promocionan a int y no ocurre desbordamiento.

Pregunta 2

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

Producción:

a = -10, b = 9

La sentencia ‘a = -b–;’ compila bien. El menos unario y el decremento unario tienen precedencia y asociatividad de derecha a izquierda. Por lo tanto, ‘-b–’ se trata como -(b–), que es válido. Entonces, -10 se asignará a ‘a’ y ‘b’ se convertirá en 9.
Pruebe el siguiente programa como ejercicio.

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

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

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 *