Rango de valores de tipo char en C

¿Es posible almacenar más de un valor de byte a un tipo de char?

Digamos por ejemplo char c; y quiero almacenar 1000 en c . ¿Es posible hacer eso?

Técnicamente, no, no puede almacenar más de un valor de byte para un tipo de char . En C, un char y un byte son del mismo tamaño, pero no necesariamente limitados a 8 bits. Muchos cuerpos de estándares tienden a usar el término “octeto” para un valor de exactamente 8 bits.

Si observa los limits.h (desde la memoria), verá el símbolo CHAR_BIT (entre otros) que le indica cuántos bits se utilizan realmente para un char y, si es lo suficientemente grande, sí, puede almacenar el valor 1000.

El rango de valores que puede almacenar en un tipo C depende de su tamaño, y eso no está especificado por C, depende de la architecture. Un tipo char tiene un mínimo de 8 bits. Y normalmente (casi universalmente) también es su máximo (puede verificarlo en sus limits.h ). Por lo tanto, en un char podrá almacenar de -128 a 127, o de 0 a 255 (firmado o sin firmar).

El tamaño mínimo para un char en C es de 8 bits, que no es lo suficientemente ancho como para contener más de 256 valores. Puede ser más amplio en una implementación particular, como una architecture direccionable por palabra, pero no debe confiar en eso.

Incluya limits.h y verifique el valor de CHAR_MAX .

Probablemente no. El estándar de C requiere que un char pueda contener al menos 8 bits, por lo que no puede depender de poder almacenar un valor de más de 8 bits en un char portátil.

(* En los sistemas más utilizados hoy en día, los caracteres son de 8 bits).

El ancho de Char es dependiente del sistema. Pero suponiendo que esté usando algo razonablemente compatible con C99, debe tener acceso a un encabezado stdint.h, que define los tipos de formatos intN_t y uintN_t donde N = 8,16,32,64. Estos están garantizados para tener al menos N bits de ancho. Entonces, si quieres estar seguro de tener un tipo con una cierta cantidad de bits (independientemente del sistema), esos son los tipos que deseas.

Ejemplo:

 #include  uint32_t foo; /* Unsigned, 32 bits */ int16_t bar; /* Signed, 16 bits */