# Understanding C++ data types II

`Part II of the small book that teaches you the C++ data types. Even if you have an IQ under 25 you will can understand and use the data types. In this part you will see an important aspect of data types... signed and unsigned.`

### Signed / Unsigned

Zero does make a difference

Letâ€™s suppose we have a data type that can hold 6 different numbers. That means that it can hold numbers 0, 1, 2, 3, 4 and 5. Many make the mistake and think that 6 numbers are the numbers from 1 to 6. Others make a bigger mistake, and say that it can hold numbers from 0 to 6. Computers use the number 0 as any other number – you have to remember that. 0 is the first positive number. 1 is the second. We have 6 spaces for 6 numbers, these numbers start from 0 and end with 5:

I hope you agree now, that if we say a data type holds x values, it actually holds the values from 0 to x-1. For example if a data type holds 1000 values, it actually holds the numbers from 0 to 999.

Positive and negative
Until now, we only saw fictive examples of data types that hold positive values. However, in computer programming negative numbers are used often. Are there any special data types that hold only negative numbers? No. Usual data types, that you will learn about in the following lessons, can be of two types, ones that hold only positive numbers, and ones that hold positive and negative numbers.
Letâ€™s take our previous example, the data type that holds 6 numbers, from 0 to 5. Letâ€™s suppose that this fictive data-type can hold negative numbers too. However, there are only 6 slots that can hold numbers, and all are positive, there is no more room for negative numbers. No problem, we take one slot and reserve it for the â€˜-â€˜ (minus) sign. This helps because negative numbers look the same as positive numbers, just that they have the minus sign in front of them. Therefore, in our example, with the numbers 0, 1, 2, 3, 4 and 5 we have:

You can observe that 0 is considered here a positive number, just as I said earlier.

Signed and unsigned
You probably realized that you have just learned what signed and unsigned data types are.
Letâ€™s review the previous examples:

This is an unsigned data type, because it accepts only positive values.

Now look at this example:

This is a signed data type, it splits in two types of numbers, positive and negative.

When you use an unsigned data type, you must specify it, and youâ€™ll see later in this book how this can be done. When you use an signed data type, you arenâ€™t supposed to specify it, because data types that donâ€™t have this specified, are signed by default (they support positive and negative numbers too).