tipos tabla rangos rango rand que programacion numeros long lenguaje generar funcion enteros datos aleatorios c int

tabla - tipos de variables en lenguaje c



¿Existe una forma general en C para hacer un número mayor de 64 bits o más pequeño que 8 bits? (3)

Las unidades de almacenamiento individuales (bytes) no son inferiores a CHAR_BITS bits de ancho 1 ; incluso si crea una struct con un único campo de bits de 4 bits, el objeto asociado siempre ocupará una unidad de almacenamiento completa.

Existen múltiples bibliotecas de precisión, como GMP, que le permiten trabajar con valores que no caben en 32 o 64 bits. Puede que quieras echarles un vistazo.

  1. 8 bits mínimo, pero puede ser más ancho.

Antes que nada, soy consciente de que lo que estoy tratando de hacer podría estar fuera del estándar C.

Me gustaría saber si es posible hacer un tipo de uint4_t / int4_t o uint128_t / int128_t en C.

Sé que podría hacer esto usando cambios de bits y funciones complejas, pero ¿puedo hacerlo sin ellos?


Puedes usar bitfields dentro de una estructura para obtener campos más angostos que uint8_t, pero el tipo de datos base en el que están almacenados no será más pequeño.

struct SmallInt { unsigned int a : 4; };

le dará una estructura con un miembro llamado que tiene 4 bits de ancho.


En la práctica, si desea números muy amplios (pero eso no se especifica en el estándar C11) probablemente desee utilizar alguna biblioteca externa aritmética de precisión arbitraria (aka bignums). Recomiendo usar GMPlib .

En algunos casos, para rangos pequeños de números, puede usar bitfields dentro de struct para tener enteros pequeños. En términos prácticos, pueden ser costosos (el compilador emitiría instrucciones de turno y máscara de bits para tratar con ellos).

Vea también esta respuesta mencionando __int128_t como una extensión en algunos compiladores.