valor tamaño que maximo int16 entre diferencia c++ cpu-architecture

c++ - tamaño - que es int32 c#



¿Por qué C++ int y los tipos largos son de 4 bytes? (8)

Muchas fuentes, incluido Microsoft , hacen referencia tanto al tipo int como al tipo largo como de 4 bytes y con un rango de (firmado) -2,147,483,648 a 2,147,483,647. ¿Cuál es el punto de tener un tipo primitivo largo si en realidad no proporciona un rango de valores más amplio?


Como han señalado otros, el supuesto que subyace a la pregunta es solo parcialmente cierto, es decir, no es válido para algunas plataformas. Si realmente desea comprender cómo llegamos a la situación actual, el Long Road to 64 Bits de J. Mashey le dará una buena visión de las diversas fuerzas presentes y cómo interactuaron.

Resumen rápido, C comenzó con char (8 bits) e int (16 bits). Luego, uno agregado short (16 bits) y long (32 bits), mientras que int podría ser de 16 o 32 bits, dependiendo de lo que fuera natural en la plataforma y la presión de compatibilidad hacia atrás. Cuando llegaron 64 bits, se agregó long long como un tipo de 64 bits y hubo algunos ajustes en los tipos más pequeños en plataformas de 64 bits. Las cosas se estabilizaron con un int 32 bits, pero long mantuvieron varias definiciones, algunas plataformas de 64 bits que tienen un long 64 bits, mientras que otras (¿quizás solo Windows?) Se mantuvieron long hasta 32 bits, probablemente debido a una presión diferente de compatibilidad hacia atrás (Unix tenía una larga historia de asumir long como el mismo tamaño que un puntero, Windows tenía más remanente en su API de la época en que int era de 16 bits y, por lo long era el único de 32 bits). Se agregaron intptr_t intXX_t ( intXX_t , intptr_t ) para ayudar a intptr_t la intención, ante el riesgo de que la familia intXX_t fuerce el tamaño constante donde realmente no se necesita ninguna.


Creo que depende de la implementación. Pueden variar, pero depende del proveedor proporcionarlos. Sin embargo, algunos proveedores simplemente lo hacen para que sean "compatibles" de manera sintáctica (es decir, puede ponerlos en su código y compilarán, pero no difieren). De vez en cuando, te encontrarás con una característica de lenguaje como esta.


El estándar de C ++ solo especifica que long es al menos tan grande como int , por lo que no hay nada criminal en el escenario cuando es exactamente tan grande : está totalmente definido por la implementación. En diferentes plataformas, los tamaños pueden importar, por ejemplo, estoy teniendo int de tamaño 4 y long de tamaño 8 en este momento en mi máquina Linux.


La especificación del lenguaje C ++ simplemente establece que el tamaño de un long debe ser al menos el tamaño de un int .

Solía ​​ser estándar tener int = 2 bytes y long = 4 bytes. Por alguna razón, int creció y se mantuvo igual (por lo menos en los compiladores de Windows). Solo puedo especular que el long se mantuvo igual por razones de compatibilidad con versiones anteriores ...


Las únicas cosas garantizadas sobre los tipos enteros son:

  1. sizeof(char) == 1
  2. sizeof(char) <= sizeof(short)
  3. sizeof(short) <= sizeof(int)
  4. sizeof(int) <= sizeof(long)
  5. sizeof(long) <= sizeof(long long)
  6. sizeof(char) * CHAR_BIT >= 8
  7. sizeof(short) * CHAR_BIT >= 16
  8. sizeof(int) * CHAR_BIT >= 16
  9. sizeof(long) * CHAR_BIT >= 32
  10. sizeof(long long) * CHAR_BIT >= 64

Las otras cosas son la implementación definida. Gracias a (4), tanto long como int pueden tener el mismo tamaño, pero debe tener al menos 32 bits (gracias a (9)).


Nadie ha respondido tu pregunta real, excepto tal vez un programador.

El estándar C / C ++ se define como Griwes descrito. Esto permite implementar los lenguajes C y C ++ donde el proveedor del compilador puede definir los tamaños más convenientes para la arquitectura de la computadora. Durante un tiempo (para Windows 3.1 y anteriores, es decir, antes de Windows 95), el código C para Windows tenía un int de 16 bits, mientras que muchas plataformas UNIX, como Solaris, HPUX y AIX tenían un int de 32 bits.

Sin embargo, los microcomputadores modernos (desde el 386), tienen registros completos de 32 bits, y la memoria de direccionamiento alineada a 32 bits es mucho más rápida que acceder a incrementos de 16 bits. Por lo tanto, el código es mucho más eficiente con un int de 32 bits, especialmente para arreglos int, que con un int de 16 bits.

Para simular un int de 16 bits en un registro de 32 bits, también tiene que desbordar en el bit 16, en lugar del 32. Así que es más fácil con un int de 32 bits, incluso si solo tiene 32 bits disponibles por mucho tiempo.


No necesariamente tiene que ser más grande. Es solo la forma en que el GCC, por ejemplo, generalmente tiene long para definirse como 8 bytes cuando lo he usado en mi máquina. La redacción de la norma generalmente dice que estos tipos ''Necesitan tener al menos el tamaño de X'' (para un ejemplo, echa un vistazo al long long y finalmente estandarizado en C ++ 11 .

Esencialmente, cualquier persona es libre de hacer lo que quiera siempre que cumpla con los requisitos. De acuerdo con el estándar, alguien podría hacer 256 bits long long , y sería perfectamente legal.


No, solo son 4 bytes en ciertas plataformas. El estándar de C ++ deja el tamaño como definido por la implementación.

En otras plataformas puede ser de un tamaño diferente.