There are three primary data types in C - char, int, and float. Programmers can derive many other data types from these. For integers, C offers short and long types which occupy 2 and 4 bytes respectively and have different value ranges. Integers can also be declared as signed or unsigned, changing whether negative values are allowed. Char values can also be signed or unsigned, affecting their range from -128 to 127 or 0 to 255. Floating point types include float, double, and long double with increasing range and memory usage.