Estaba leyendo en el estándar C99 sobre las conversiones aritméticas habituales.C conversiones aritméticas habituales
Si ambos operandos tienen el mismo tipo, entonces no es necesario realizar más conversiones para .
lo contrario, si los dos operandos han firmado tipos de enteros o ambos tienen tipos de enteros sin signo, el operando con el tipo de menor número entero rango de conversión se convierte en el tipo del operando con mayor rango.
De lo contrario, si el operando que tiene tipo entero sin signo tiene rango mayor o igual que el rango del tipo del otro operando, entonces el operando con el tipo entero con signo se convierte en el tipo de la operando con tipo entero sin signo.
De lo contrario, si el tipo del operando con el tipo entero con signo puede representar todos los valores del tipo del operando con unsigned tipo entero, entonces el operando con el tipo entero sin signo se convierte al tipo de el operando con tipo entero con signo.
De lo contrario, ambos operandos se convierten al entero sin signo tipo correspondiente al tipo del operando con tipo entero con signo.
Digamos que tengo el siguiente código:
#include <stdio.h>
int main()
{
unsigned int a = 10;
signed int b = -5;
printf("%d\n", a + b); /* 5 */
printf("%u\n", a + b); /* 5 */
return 0;
}
pensé que se aplica el párrafo en negrita (ya unsigned int
y signed int
tienen el mismo rango ¿Por qué no es B convertido a unsigned
O tal vez.? se convierte en sin firmar, pero hay algo que no entiendo?
Gracias por su tiempo :-)
¿Qué te hace pensar que 'b' no se convierte en' unsigned'? –
@Charles Bailey Supongo que esperaba tontamente resultados diferentes para los printfs: -? – user963368
+5 es +5, independientemente de si el int está firmado o no. –