Conversiones de tipos enteros sin signo
Cuando un entero sin signo se convierte a un entero o a un tipo de punto flotante, si el valor original se puede representar en el tipo del resultado, el valor no cambia.
Cuando el compilador convierte un entero sin signo a un entero de mayor tamaño, el valor se completa con ceros. Cuando se convierte a un entero de menor tamaño, los bits de orden superior se truncan. El resultado se interpreta con el tipo del resultado, como se muestra en este ejemplo:
unsigned k = 65533;
short j;
j = k;
printf_s( "%hd\n", j ); // Prints -3
Cuando el compilador convierte un entero con signo a un tipo de punto flotante, si el valor original no se puede representar exactamente en el tipo del resultado, el resultado será el siguiente valor más alto o más bajo que se puede representar.
Consulte Almacenamiento de tipos básicos para obtener información sobre los tamaños de tipos enteros y de punto flotante.
Específicos de Microsoft
En el compilador de Microsoft, unsigned
(o unsigned int
) y unsigned long
son tipos distintos, pero equivalentes. La conversión de un valor unsigned int
se realiza de la misma forma que la conversión de un unsigned long
.
FIN de Específicos de Microsoft
En la tabla siguiente se resumen las conversiones de tipos enteros sin signo.
Tabla de conversiones de tipos enteros sin signo
De | En | Método |
---|---|---|
unsigned char |
char |
Se conserva el patrón de bits; el bit de orden superior se convierte en el bit de signo |
unsigned char |
short |
Extensión de cero |
unsigned char |
long |
Extensión de cero |
unsigned char |
long long |
Extensión de cero |
unsigned char |
unsigned short |
Extensión de cero |
unsigned char |
unsigned long |
Extensión de cero |
unsigned char |
unsigned long long |
Extensión de cero |
unsigned char |
float |
Se convierte exactamente en float . |
unsigned char |
double |
Se convierte exactamente en double . |
unsigned char |
long double |
Se convierte exactamente en long double . |
unsigned short |
char |
Se mantiene el byte de orden inferior |
unsigned short |
short |
Se conserva el patrón de bits; el bit de orden superior se convierte en el bit de signo |
unsigned short |
long |
Extensión de cero |
unsigned short |
long long |
Extensión de cero |
unsigned short |
unsigned char |
Se mantiene el byte de orden inferior |
unsigned short |
unsigned long |
Extensión de cero |
unsigned short |
unsigned long long |
Extensión de cero |
unsigned short |
float |
Se convierte exactamente en float . |
unsigned short |
double |
Se convierte exactamente en double . |
unsigned short |
long double |
Se convierte exactamente en long double . |
unsigned long |
char |
Se mantiene el byte de orden inferior |
unsigned long |
short |
Se mantiene la palabra de orden inferior |
unsigned long |
long |
Se conserva el patrón de bits; el bit de orden superior se convierte en el bit de signo |
unsigned long |
long long |
Extensión de cero |
unsigned long |
unsigned char |
Se mantiene el byte de orden inferior |
unsigned long |
unsigned short |
Se mantiene la palabra de orden inferior |
unsigned long |
unsigned long long |
Extensión de cero |
unsigned long |
float |
Se convierte en el representable más cercano float . |
unsigned long |
double |
Se convierte exactamente en double . |
unsigned long |
long double |
Se convierte exactamente en long double . |
unsigned long long |
char |
Se mantiene el byte de orden inferior |
unsigned long long |
short |
Se mantiene la palabra de orden inferior |
unsigned long long |
long |
Se mantiene el valor dword de orden inferior |
unsigned long long |
long long |
Se conserva el patrón de bits; el bit de orden superior se convierte en el bit de signo |
unsigned long long |
unsigned char |
Se mantiene el byte de orden inferior |
unsigned long long |
unsigned short |
Se mantiene la palabra de orden inferior |
unsigned long long |
unsigned long |
Se mantiene el valor dword de orden inferior |
unsigned long long |
float |
Se convierte en el representable más cercano float . |
unsigned long long |
double |
Se convierte en el representable más cercano double . |
unsigned long long |
long double |
Se convierte en el representable más cercano long double . |