2012-05-18 7 views
5

¿Cuándo ocurre que un entero con signo no puede representar todos los valores del tipo original con respecto a la promoción entera?Promoción integral

Desde el texto K & R, C Programming Language, 2nd Ed. pag. 174

A.6.1 Promoción Integral

un personaje, un entero corto, o un campo de bits número entero, todo firmado o no, o un objeto de tipo de enumeración, se puede utilizar en una expresión siempre que se pueda usar un número entero. Si un int puede representar todos los valores del tipo original, entonces el valor se convierte en int; de lo contrario, el valor se convierte en unsigned int. Este proceso se llama promoción integral.

Este código de muestra de los límites de los tipos de mi sistema:

#include <stdio.h> 
#include <limits.h> 

int main(void) 
{ 

    printf("CHAR_MAX: %i\n", CHAR_MAX);  
    printf("UCHAR_MAX: %i\n", UCHAR_MAX); 

    printf("SHORT_MAX: %i\n", SHRT_MAX);   
    printf("USHORT_MAX: %i\n", USHRT_MAX); 

    printf("INT_MAX: %i\n", INT_MAX);  
    printf("UINT_MAX: %u\n", UINT_MAX); 

    return 0; 
} 

El resultado es:

CHAR_MAX: 127 
UCHAR_MAX: 255 
SHORT_MAX: 32767 
USHORT_MAX: 65535 
INT_MAX: 2147483647 
UINT_MAX: 4294967295 

El tipo int firmado es mucho más grande que cualquiera de los otros tipos, Entonces, ¿cuándo volvería a caer en UINT_MAX?

+0

Los valores que acaba de imprimir pueden ser diferentes en diferentes sistemas. Simplemente está garantizado, que un corto es <= int y un int es <= un largo, por ejemplo. Por lo tanto, short e int podrían tener el mismo tamaño. La publicación de @ minitech es correcta – guitarflow

Respuesta

5

Es posible que un short int a ser el mismo tamaño que un int, por lo que un unsigned short int no podían ser promovidos a un int, por ejemplo. Este no es el caso en tu compilador.

Cuestiones relacionadas