Necesito representar un número binario de 40 bits. ¿Qué tipo de datos C se debe usar para manejar esto?¿Qué tipo de datos C puede representar un número binario de 40 bits?
Respuesta
Si estás utilizando un compilador C99 o C11 compatible, a continuación, utilizar int_least64_t
para una máxima compatibilidad. O bien, si desea un tipo sin firmar, uint_least64_t
. Ambos están definidos en <stdint.h>
<stdint.h>
generalmente también define int64_t
, pero como no es requerido por la norma, puede no estar definido en cada implementación. Sin embargo:
int_least64_t
- al menos 64 bits, yint_fast64_t
- el tamaño más rápido en esta implementación de al menos 64 bits
son ambos necesarios para estar presente en C99 y C11 (ver § 7.18.1.2-3 en el estándar C99, y § 7.20.1.2-3 en el estándar C11).
Aunque C99 especifica que es long long
at least 64 bits on a particular machine (§ 5.2.4.2.1), los tipos de <stdint.h>
están diseñados para ser explícitamente portátil.
Puede leer más sobre tamaños enteros en diferentes plataformas here. Tenga en cuenta que el tamaño de los tipos enteros es un problema con el tipo de datos long
- en Windows de 64 bits, actualmente es de 32 bits, mientras que en 64 bits de Linux es de 64 bits. Por esta razón, creo que es más seguro usar los tipos de <stdint.h>
Vale la pena señalar que algunos sienten que long long
es más legible. Personalmente, prefiero los tipos de <stdint.h>
, porque te permiten decir a qué te refieres cuando los usas, lo cual me parece más legible. Por supuesto, la legibilidad es a menudo una cuestión de gusto - y si está trabajando con una base de código existente, me basta con seguir lo que hacen :)
Si el compilador sólo soporta C89, a continuación, permitirá R..'s solution usted hasta 53 bits de precisión entera.
+1 por usar esto durante 'largo largo'. –
No estoy de acuerdo. 'long long' es, de hecho, teóricamente * más * portable, porque una implementación C99 o C11 conforme debe proporcionar ese tipo, mientras que' int64_t' no está necesariamente presente. 'int64_t' debe usarse solo si necesita un tipo de complemento de dos exactamente 64 bits sin relleno: en casos como este, donde solo necesita" al menos 40 bits ", entonces es preferible' largo largo', ya que no agrega innecesarios restricciones – caf
@caf: ¿C99 tampoco especifica 'int64_t' y familia? (Y hasta donde yo sé, todavía están presentes en C11). Si no desea especificar exactamente el ancho de 64 bits, puede usar 'int_least64_t' o' int_fast64_t'. –
long long
es un tipo entero con al menos 64 bits. Se ajustará a los valores de 40 bits firmados en todas las plataformas. También puede usar unsigned long long
para valores sin firmar de 64 bits o más.
Puede usar long long
, que puede contener 64 bits o más. Para obtener más información, consulte
http://en.cppreference.com/w/cpp/language/types
http://en.wikipedia.org/wiki/Integer_(computer_science)#Common_long_integer_sizes
Tiene * al menos * 64 bits de longitud. –
Gracias. Fijo. –
Las respuestas existentes son buenas, pero si también desea compatibilidad con C89, double
podrá almacenar enteros de 40 bits exactamente en todas las implementaciones conformes con IEEE 754.
- 1. Cómo averiguar el tipo integral más pequeño que puede representar un número, en tiempo de compilación
- 2. tipo de datos para representar un gran decimal en java
- 3. Unión C++ para representar la memoria de datos frente a la variable escalar C tipo
- 4. Ruby: contar el número de 1 de un número binario
- 5. ¿Qué tipo de datos puede extraer de un UUID?
- 6. ¿Encontrar la cantidad de bits necesarios para representar un entero positivo en binario?
- 7. Manipulación del tipo de datos de 80 bits en C
- 8. ¿Cómo es que un kernel de 32 bits puede ejecutar un binario de 64 bits?
- 9. ¿Cómo puede reemplazarse un binario en C++?
- 10. Representación del número binario
- 11. Se pueden usar dobles para representar un número de 64 bits sin pérdida de precisión
- 12. Representar hash MD5 como un número entero
- 13. Estructura de datos para representar un laberinto
- 14. ¿Cómo representar un árbol binario con tablas (html)?
- 15. ¿Qué tipo de datos usar para un número muy grande en C++?
- 16. ¿Cómo puedo representar un entero de 128 bits en Java o C++?
- 17. ¿Cómo puedo configurar todos los bits en '1' en un número binario de un tamaño desconocido?
- 18. ¿Podrá Neo4J manejar 40 Giga de datos?
- 19. Qué valores no se pueden representar correctamente con un doble
- 20. sesión extender un número de nueve bits en C
- 21. C++: ¿Es seguro comparar un número entero de 64 bits con un número entero de 32 bits?
- 22. número de 1 en 32 bits número
- 23. ¿Cuál es el tipo de datos más grande para almacenar (e imprimir) un número entero?
- 24. int24 - tipo de datos integral de 24 bits
- 25. Conversión de un número hexadecimal a binario en ruby
- 26. Contar el número de bits puestos en un entero
- 27. Bash: escribir número entero de archivo binario
- 28. cómo convertir dos bytes en un número de 16 bits?
- 29. promoción tipo de datos en C
- 30. No se puede escribir un archivo binario
+1 para compensar los downvotes inexplicables. –
Parece que los 2 downvoters te anotaron +3 (a juzgar por los 5 + 1 en el comentario +1) :-) –
no portátil, pero en muchos TI DSP [long es un tipo de 40 bits] (http: // stackoverflow .com/a/28352310/995714) siempre se puede usar para ese fin. de largo en la mayoría de los sistemas POSIX tiene 64 bits y también se puede usar –