Ioannis said:
What do you mean it isn't a standard? Of course it is.
Techinally the current C Standard is ISO 9899:1999, also called C99.
However, in practise, C95 (the Standard ISO:9899:1989 + Amendment 1) is
more widely implemented and used.
I want to program in C95.
Perfectly fine.
Coming to your question, the Standard actually defines the fundamental
types in terms of their range, i.e., a signed char must hold values
from -127 to 127, an unsigned long must hold values from 0 to
4294967295 and so on. These details can be found in section 5.2.4.2 of
the Standard.
Only the types intN_t and uintN_t for values of N 8, 16, 32, and 64 are
more rigorously defined. They must be exactly of that size (in bits)
and must be represented in twos complement and must not have padding
bits. But they are not relevant to you, as you are focused on C95.
Although you can find out the number of usable (i.e. value) bits from
the range of a type, it's not easy and even then there is no
information on particular bits. For example bits 2 to 4 may be padding
bits, or may not be, you can't easily tell.