Conversiones de tipos enteros con signo
Cuando un entero con signo se convierte a un entero o a un tipo de punto flotante, el valor no cambia si se puede representar en el tipo del resultado.
Cuando un entero con signo se convierte a un entero de mayor tamaño, se agrega al valor la extensión de signo. 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:
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
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.
Para obtener información sobre los tamaños de tipos enteros y de punto flotante, consulte Almacenamiento de tipos básicos.
En la tabla siguiente se resumen las conversiones de tipos enteros con signo. Se presupone que el tipo char
tiene signo de manera predeterminada. Si usa una opción de tiempo de compilación para cambiar el valor predeterminado del tipo char
a un tipo sin signo, se aplican las conversiones especificadas en la tabla Conversiones de tipos enteros sin signo para el tipo unsigned char
, en lugar de las conversiones de esta tabla.
Específicos de Microsoft
En el compilador de Microsoft, int
y long
son tipos distintos, pero equivalentes. La conversión de un valor int
se realiza de la misma forma que la conversión de un valor long
.
FIN de Específicos de Microsoft
Tabla de conversiones de tipos enteros con signo
De | En | Método |
---|---|---|
char 1 |
short |
Extensión de signo |
char |
long |
Extensión de signo |
char |
long long |
Extensión de signo |
char |
unsigned char |
Se mantiene el patrón; el bit de orden superior pierde la función de bit con signo |
char |
unsigned short |
Extensión de signo a short ; convierte short en unsigned short |
char |
unsigned long |
Extensión de signo a long ; convierte long en unsigned long |
char |
unsigned long long |
Extensión de signo a long long ; convierte long long en unsigned long long |
char |
float |
Se representa exactamente como float . |
char |
double |
Se representa exactamente como double . |
char |
long double |
Se representa exactamente como long double . |
short |
char |
Se mantiene el byte de orden inferior |
short |
long |
Extensión de signo |
short |
long long |
Extensión de signo |
short |
unsigned char |
Se mantiene el byte de orden inferior |
short |
unsigned short |
Se mantiene el patrón de bits; el bit de orden superior pierde la función de bit con signo |
short |
unsigned long |
Extensión de signo a long ; convierte long en unsigned long |
short |
unsigned long long |
Extensión de signo a long long ; convierte long long en unsigned long long |
short |
float |
Se representa exactamente como float . |
short |
double |
Se representa exactamente como double . |
short |
long double |
Se representa exactamente como long double . |
long |
char |
Se mantiene el byte de orden inferior |
long |
short |
Se mantiene la palabra de orden inferior |
long |
long long |
Extensión de signo |
long |
unsigned char |
Se mantiene el byte de orden inferior |
long |
unsigned short |
Se mantiene la palabra de orden inferior |
long |
unsigned long |
Se mantiene el patrón de bits; el bit de orden superior pierde la función de bit con signo |
long |
unsigned long long |
Extensión de signo a long long ; convierte long long en unsigned long long |
long |
float |
Se representa como float . Si long no se puede representar con exactitud, se pierde precisión. |
long |
double |
Se representa exactamente como double . |
long |
long double |
Se representa exactamente como long double . |
long long |
char |
Se mantiene el byte de orden inferior |
long long |
short |
Se mantiene la palabra de orden inferior |
long long |
long |
Se mantiene el valor dword de orden inferior |
long long |
unsigned char |
Se mantiene el byte de orden inferior |
long long |
unsigned short |
Se mantiene la palabra de orden inferior |
long long |
unsigned long |
Se mantiene el valor dword de orden inferior |
long long |
unsigned long long |
Se mantiene el patrón de bits; el bit de orden superior pierde la función de bit con signo |
long long |
float |
Se representa como float . Si long long no se puede representar con exactitud, se pierde precisión. |
long long |
double |
Se representa como double . Si long long no se puede representar con exactitud como double , se pierde precisión. |
long long |
long double |
Se representa como double . Si long long no se puede representar con exactitud como double , se pierde precisión. |
1Todas las entradas de char
presuponen que el tipo char
tiene signo de forma predeterminada.