unsigned char
signed char is the smallest unsigned integer type in C++, it often gets typedef-ed as "byte" (alternatively people use signed char for that reason) because it uses one byte of memory (depending upon what architecture defines it as, but no less than 8 bits). The range of values that can definitely be stored in this type is 0 – 255.
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | value | 
|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 | 
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 127 | 
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 255 | 
Operation 255+1 will likely cause a "roll over" and the result will be 0, but it is unwise to count on that when writing multi-architecture code, as it is possible to define byte in a processor to be more than 8 bits.
Relationship with char
unsigned char uses exact same amount of memory as char, the main difference happens during the output; char gets interpreted as the code of ASCII character, while unsigned char is interpreted as non-negative binary integer.
Other C++ datatypes of the same size
Other C++ data types storing unsigned integers
- unsigned short no less than 16 bits, no less than char
 - unsigned (int) no less than 16 bits, no less than short
 - unsigned long no less than 32 bits, no less than int
 - unsigned long long no less than 64 bits, no less than long