Según el estándar c99, el tamaño de long long
debe ser como mínimo de 64 bits. ¿Cómo se implementa esto en una máquina de 32 bits (por ejemplo, adición o multiplicación de 2 long long
s). Además, ¿cuál es el equivalente de long long
en C++.implementación larga larga en máquina de 32 bits
Respuesta
En la arquitectura IA32, el entero de 64 bits se implementa utilizando dos registros de 32 bits (eax y edx).
Existen equivalentes específicos de plataforma para C++, y puede usar el encabezado stdint.h donde esté disponible (boost le proporciona one).
Si se preocupan por tamaños de bits, debe utilizar
#include <stdint.h>
int32_t n;
y amigos. Esto también funciona para C++.
Los números de 64 bits en las máquinas de 32 bits se implementan como usted piensa, por 4 bytes adicionales. Por lo tanto, usted podría implementar su propio 64-bit tipo de datos al hacer algo como esto:
struct my_64bit_integer {
uint32_t low;
uint32_t high;
};
Se podría, por supuesto, tienen que poner en práctica los operadores matemáticos mismo.
Hay un int64_t en stdint.h que viene con mi versión de GCC, y en Microsoft Visual C++ también tiene el tipo __int64.
El equivalente en C++ también es largo. No es requerido por el estándar, pero la mayoría de los compiladores lo soportan porque es muy útil.
¿Cómo se implementa? La mayoría de las arquitecturas de computadoras ya tienen soporte integrado para adiciones y restas de palabras múltiples. No hacen adiciones de 64 bits directamente, sino que usan el indicador de acarreo y una instrucción de adición especial para crear un agregado de 64 bits a partir de dos adiciones de 32 bits.
La misma extensión existe para la resta también (el acarreo se denomina pedir prestado en estos casos).
Las multiplicaciones y divisiones de Longword se pueden construir a partir de multiplicaciones más pequeñas sin la ayuda de indicadores de acarreo. A veces, simplemente, hacer las operaciones poco a poco es más rápido.
Hay arquitecturas que no tienen ninguna bandera (algunos chips DSP y micros simples). En estas arquitecturas, el desbordamiento debe detectarse con operaciones lógicas. La aritmética de palabras múltiples tiende a ser lenta en estas máquinas.
Como todos han afirmado, un entero de 64 bits se implementa normalmente simplemente utilizando dos enteros de 32 bits juntos. Luego, la generación de código inteligente se utiliza para realizar un seguimiento de los bits carry and/or borrow para realizar un seguimiento del desbordamiento y ajustar en consecuencia.
Esto, por supuesto, hace que dicha aritmética sea más costosa en términos de espacio de código y tiempo de ejecución, que el mismo código compilado para una arquitectura con soporte nativo para operaciones de 64 bits.
El próximo estándar de C++ (con vencimiento en 2009, o tal vez 2010), está programado para incluir el tipo de "larga duración". Como se mencionó anteriormente, ya es de uso común.
La implementación corresponde a los escritores del compilador, aunque las computadoras siempre han admitido operaciones de precisión múltiples.Algunos lenguajes, como Python y Common Lisp, requieren soporte para enteros de precisión indefinida. Hace mucho tiempo, escribí rutinas de multiplicación y división de 64 bits para una computadora (la Z80) que podía administrar sumas y restas de 16 bits, sin multiplicación de hardware.
Probablemente la forma más fácil de ver cómo se implementa una operación en su compilador en particular es escribir un ejemplo de código y examinar la salida del ensamblador, que está disponible en todos los principales compiladores con los que he trabajado.
- 1. JavaScript: desplazamiento en bits del número larga larga
- 2. __int64 en una máquina de 32 bits?
- 3. Encuesta larga en Django
- 4. Pulsación larga en UITableView
- 5. Botón de pulsación larga
- 6. tamaño de la máquina 64 o 32 bits
- 7. Objetivo C extraña conversión decimal a larga larga
- 8. ¿Cómo ejecuto un VBScript en modo de 32 bits en una máquina de 64 bits?
- 9. hilos pitón de larga ejecución
- 10. ¿Cómo extraer cuatro entradas cortas sin signo de una larga int larga?
- 11. Ejecución de una aplicación C# de 32 bits en una máquina de 64 bits
- 12. ¿Puedo ejecutar una imagen de VMware de 64 bits en una máquina de 32 bits?
- 13. Volcado de depuración del proceso de 32 bits capturado en la máquina de 64 bits
- 14. Compilación de la aplicación matlab de 32 bits en la máquina de 64 bits (C++)
- 15. Pulsación larga Android
- 16. Ruta simple más larga
- 17. HttpWebRequest solución larga URI?
- 18. línea más larga en vim?
- 19. Java Conversión larga en moneda
- 20. Encuentra más larga secuencia
- 21. Crear exe de 32 bits del código python en la máquina de 64 bits
- 22. ejecutando un binario de 32 bits en una máquina de 64 bits
- 23. Java Accesibilidad de 32 bits en una máquina de 64 bits
- 24. La máquina virtual de 32 o 64 bits es más rápida en la máquina de 64 bits (vmware)
- 25. ¿Cómo ejecutar una API hecha para 32 bits en una máquina de 64 bits?
- 26. libstdC++ versión de 64 bits y 32 bits en la misma máquina
- 27. ¿Pueden mis componentes COM de 32 bits y 64 bits co-residir en la misma máquina?
- 28. Android pulsación de tecla larga
- 29. envoltura larga de texto jqgrid
- 30. Cambiar demora larga de clic
Las máquinas de 8 y 16 bits también lograron manejar variables más grandes que su "bitness del procesador". Muchas preguntas ya están respondidas por la historia. –