C Data Types

The different data types in C all have their own characteristics.

Since C is strongly typed, certain actions that are intuitive in Javascript or Python may not yield the results you wanted. For instance, if you have variable int x and you try and initialize it with a fractional number, the fractional part will be discarded since x stores an int.

Arrays are intialized as normal, but followed by n items that should reside in the array: int numbers[n].

The following list is only what I've used most and by no means a complete list. Look at the Wikipedia page for more info.

Type Bits Limits Format Description
char 8 -127, +127 %c Used for characters within strings (array of chars)
signed short int 16 -32,767, +32,767 %i Used for numbers and traversing data from stdin
unsigned short int 16 0, +65,535 %u
signed int 16 -2,147,483,648, +2,147,483,647 %i
unsigned int 32 0, +4,294,967,295 %i
signed long int 64 -9,223,372,036,854,775,808, +9,223,372,036,854,775,807 %li
unsigned long int 64 0, +18,446,744,073,709,551,615 %lu
float 32 n/a %f Use for floating point numbers
double 64 n/a %lf Use for really long floating point numbers


Unsigned numbers are always zero or higher and will have a range of 0 to (2^n) - 1. Signed numbers are negative or positive and have a range of -(2^n-1) to (2^n-1) - 1.


int's can be short or long. Each processor has their own limitations they will choose, but short is always smaller than long, short must be at least 16 bits, and long must be at least 32 bits. It is usually the case that short is 16 bits and long is 32 bits, but the real value on your processor can be found as symbolic constants within the <limits.h> header.

int values can be represented as standard decimal (123), octal (0173), or as hexadecimal (0x7B).


The type long double represents extended-precision floating point. The processor decides the final size of floats and the real values can be found as symbolic constants within the <float.h> header.


Last modified: 202206101419