sirve que para long definicion data c++ long-integer

long - short c++ para que sirve



¿Cuál es la diferencia entre "long", "long long", "long int" y "long long int" en C++? (5)

Esto parece confuso porque está tomando long como un tipo de datos en sí mismo.

long no es más que la abreviatura de long int cuando lo está usando solo.

long es un modificador, puede usarlo también con double long double .

long == long int .

Ambos toman 4 bytes.

Estoy en transición de Java a C ++ y tengo algunas preguntas sobre el tipo de datos long . En Java, para contener un número entero mayor que 2 32 , simplemente escribiría long x; . Sin embargo, en C ++, parece que tanto long es un tipo de datos y un modificador.

Parece haber varias formas de usar long :

long x; long long x; long int x; long long int x;

Además, parece que hay cosas como:

long double x;

y así.

¿Cuál es la diferencia entre todos estos diversos tipos de datos, y todos tienen el mismo propósito?


Históricamente, en los primeros tiempos C, cuando los procesadores tenían una longitud de palabra de 8 o 16 bits, int era idéntico al short hoy (16 bits). En cierto sentido, int es un tipo de datos más abstracto que char , short , long o long long , ya que no puede estar seguro del ancho de bit.

Cuando se define int n; podrías traducir esto con "dame el mejor compromiso de ancho de bit y velocidad en esta máquina para n". Quizás en el futuro espere que los compiladores traduzcan int para ser de 64 bits. Por lo tanto, cuando desee que su variable tenga 32 bits y no más, mejor use una long explícita como tipo de datos.

[Editar: #include <stdint.h> parece ser la forma correcta de asegurar los anchos de bits usando los tipos int ## _ t, aunque todavía no es parte del estándar.]


Long y long int son al menos 32 bits.

long long y long long int son al menos 64 bits. Debe usar un compilador c99 o mejor.

los dobles largos son un poco extraños. Búsquelos en Wikipedia para más detalles.


long es equivalente a long int , tan short es equivalente a short int . Un long int es un tipo integral con signo que tiene al menos 32 bits, mientras que un long long int long long o long long int es un tipo integral con signo que tiene al menos 64 bits.

Esto no significa necesariamente que un long long es más ancho que un long . Muchas plataformas / ABI usan el modelo LP64 , donde long (y punteros) tienen 64 bits de ancho. Win64 usa el LLP64 , donde el long es todavía de 32 bits, y el de long long (y los punteros) son de 64 bits de ancho.

Aquí hay un buen resumen de los modelos de datos de 64 bits.

long double no garantiza mucho más de lo que será al menos tan ancho como un double .


long y long int son idénticos. Por lo tanto, son long long y long long int . En ambos casos, el int es opcional.

En cuanto a la diferencia entre los dos conjuntos, el estándar C ++ exige intervalos mínimos para cada uno, y ese long long es al menos tan long como long .

Las partes que controlan el estándar (C ++ 11, pero esto ha existido durante mucho tiempo) son, para uno, 3.9.1 Fundamental types , sección 2 (una sección posterior proporciona reglas similares para los tipos integrales sin firmar):

Hay cinco tipos de entero con signo estándar: char firmado, int corto, int, int largo y int largo largo. En esta lista, cada tipo proporciona al menos tanto almacenamiento como los que lo preceden en la lista.

También hay una tabla 9 en 7.1.6.2 Simple type specifiers , que muestra las "asignaciones" de los especificadores a los tipos reales (lo que demuestra que int es opcional), una sección de la cual se muestra a continuación:

Specifier(s) Type ------------- ------------- long long int long long int long long long long int long int long int long long int

Tenga en cuenta la distinción entre el especificador y el tipo. El especificador es cómo le dice al compilador de qué tipo es, pero puede usar diferentes especificadores para terminar en el mismo tipo.

Por long tanto, long por sí solo no es un tipo ni un modificador como lo plantea su pregunta, es simplemente un especificador para el tipo long int . Ídem por long long es un especificador para el tipo long long int .

Aunque el estándar C ++ en sí no especifica los rangos mínimos de tipos integrales, cita C99, en 1.2 Normative references , como aplicable. Por lo tanto, los rangos mínimos que se establecen en C99 5.2.4.2.1 Sizes of integer types <limits.h> son aplicables.

En términos de long double , en realidad es un valor de coma flotante en lugar de un número entero. De forma similar a los tipos integrales, se requiere tener al menos tanta precisión como un double y proporcionar un superconjunto de valores sobre ese tipo (es decir, al menos esos valores, no necesariamente más valores).