¿El rango de valores de los tipos de datos C depende del “sistema”?

Acabo de empezar a progtwigr en el progtwig C idioma y desea obtener el tipo de datos tamaño-valor sujeto directamente.

He visto algunas tablas de rango de valores de diferentes tipos de datos ( como esta ).

El problema es que he aprendido y leído aquí que hay diferentes parámetros que influyen en el tamaño de cada tipo de datos, y mi suposición es que el rango de valores también debe variar.

Por ejemplo, si 1 byte = 16 bit entonces creo que el signed char podría contener 0-65535.

¿Qué tan exactas son esas tablas? ¿Está garantizado el rango que muestran (pero los tipos podrían contener también valores más grandes / más pequeños)?

La especificación del lenguaje C no define ningún rango exacto para cada tipo de datos. Solo define un valor mínimo que un tipo particular debería poder mantener.

Al llegar a su pregunta en esa tabla, NO es la representación precisa de los rangos definidos por C. Puede ser cierto en una plataforma en particular en la que el autor lo estaba ejecutando. Pero no siempre puede ser (y no debe ser) tomado como la fuente autorizada.

Si desea conocer el rango exacto en su plataforma, consulte (o incluya) < limits.h > . O puede usar el operador sizeof en los tipos para obtener la información del comstackdor.

Si desea saber el número exacto de bits , utilice CHAR_BIT definido en .

Por ejemplo, el número de bits en un int se puede encontrar usando: CHAR_BIT * sizeof(int) .

De la misma manera para un tipo T dado, se puede encontrar el número de bits: CHAR_BIT * sizeof(T) .

Lea también las primeras 3 o 4 preguntas del C-FAQ que son bastante relevantes para su pregunta.

El rango mínimo mostrado allí debe estar disponible. Es el mínimo garantizado por la norma que todas las implementaciones conformes suministrarán al menos eso.

C es un lenguaje “cercano al metal”, por lo tanto, algunas cosas (como el tamaño de int ) dependen de la architecture particular para la que se está comstackndo . Siempre se debe saber antes de que su progtwig salga de sus manos, para que pueda cuidarlo fácilmente con sizeof y #defines

Las tablas que se encuentran en cualquier lugar son solo para referencia. Solo puedes depender de lo que sea visible para el comstackdor.

Tu proceso de pensamiento es más o menos correcto. Estas tablas son generalmente confiables porque son cálculos fáciles de hacer dado que usted conoce su tamaño.

Los caracteres siempre tendrán un byte grande (que es de 8 bits, no 16), y ese byte solo tendrá 2 ^ 8 = 256 combinaciones posibles, por lo que el rango de un carácter solo será de 0 a 255 o -128 a 127 dependiendo de si está firmado o no.

Para nuestros otros enteros, se aplica la misma lógica. La única diferencia aquí es que el tamaño de estos tipos depende del sistema operativo para el que comstack (lo que la tabla reconoce, con diferentes rangos para un int de 2 bytes y un int de 4 bytes).

Sin embargo, no hay otros parámetros que afecten a los valores que estos tipos pueden mantener además de su tamaño en bytes, y si está haciendo algo que depende de su tamaño (como el desbordamiento de enteros), debe usar sizeof () para verificarlo.