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