3.2. Data Types
All the data types defined by C are made up of units of
memory called bytes. On most computer
architectures a byte is made up of eight bits,
each bit stores a one or a zero. These eight bits with two states
give 256 combinations (28). So an integer
which takes up two bytes can store a number between 0 and 65535 (0 and
216. Usually however, integer variables
use the first bit to store whether the number is
positive or negative so their value will be between -32768 and
+32767.
As we mentioned, there are eight basic data types defined in
the C language. Five types for storing integers of varying sizes and
three types for storing floating point values
(values with a decimal point). C doesn't provide a basic data type
for text. Text is made up of individual characters and characters are
represented by numbers. In the last example we used one of the
integer types: int. This is the most commonly used
type in the C language.
The majority of data used in computer programs is made up of
the integer types, we'll discuss the floating point types a little
later. In order of size, starting with the smallest, the integer
types are char, short,
int, long and long
long. The smaller types have the advantage of taking up
less memory, the larger types incur a performance penalty. Variables
of type int store the largest possible integer
which does not incur this performance penalty. For this reason,
int variables can be different depending what type
of computer you are using.
The char data type is usually one byte, it
is so called because they are commonly used to store single
characters. The
size of the other types is dependent on the hardware of your computer.
Most desktop machines are "32-bit", this refers to the
size of data that they are designed for processing. On
"32-bit" machines the int data type
takes up 4 bytes (232). The
short is usually smaller, the
long can be larger or the same size as an
int and finally the long long is
for handling very large numbers.
The type of variable you use generally doesn't have a big
impact on the speed or memory usage of your application. Unless you
have a special need you can just use int variables.
We will try to point out the few cases where it can be important in
this book. A decade ago, most machines had 16-bit processors, this
limited the size of int variables to 2 bytes. At
the time, short variables were usually also 2 bytes
and long would be 4 bytes. Nowadays, with 32-bit
machines, the default type
(int) is usually large enough to satisfy what used
to require a variable of type long. The
long long type was introduced more recently to
handle very large numeric values.
Some computers are better at handling really big numbers so
the size of the data types will be bigger on these machines. To find
out the size of each data type on your machine compile and run this
piece of code. It uses one new language construct
sizeof(). This tells you how many bytes a data
type takes up.
Example 3-2. sizeof_types.c
int
main()
{
printf("sizeof(char) == %d\n", sizeof(char));
printf("sizeof(short) == %d\n", sizeof(short));
printf("sizeof(int) == %d\n", sizeof(int));
printf("sizeof(long) == %d\n", sizeof(long));
printf("sizeof(long long) == %d\n", sizeof(long long));
return 0;
}