Compartir a través de


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
char1 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.

Vea también

Conversiones de asignación