The fundamental data types may be modified by the prefixes signed, unsigned, short, and long. These modifications change the range of values that can be represented by the fundamental data type.
Modified Integer Types
|Qualified Type||Min||Max||Size (Bits)|
|char, signed char||-128||127||8|
|unsigned short int||0||65535||16|
|short int, signed short int||-32768||32767||16|
|int, signed int||-32768||32767||16|
|unsigned long int||0||232-1||32|
|long int, signed long int||-231||231-1||32|
|unsigned long long int||0||264-1||64|
|long long int, signed long long int||-263||263-1||64|
The keyword int is optional when it is modified (shown in italics in table above). For example, an unsigned int could be specified more simpy as unsigned. The only time int must appear is when used by itself.
Also note that the fundamental data types are all signed by default. So int and signed int mean exactly the same thing. signed is not required, but often used when one wants to make their code explicitly clear.
Some compilers, such as the legacy MPLAB® C18 compiler, support the apparently contradictory short long which is typically defined to be 24-bits. This data type is usually found on compilers that support digital signal processors where 24-bit data is used in high-end audio applications.
As with the fundamental data types, the sizes shown in the table above may vary from one compiler to the next. For example, the short modifier has no effect on int with the MPLAB XC16 compiler, while the MPLAB XC32 compiler defines a short as 16-bits versus the full int as 32-bits.
Modified Floating-Point Types
On the floating point side of data types the only valid qualifier is long and it is typically used only with double.
|Qualified Type||Absolute Min||Absolute Max||Size (Bits)|
Most compilers define float and double as shown in the table above, while some allow long to be applied to float and double. The data above is representative of the MPLAB XC16 compiler, but should be similar for all IEEE-754 format floating point implementations.
Some compilers provide a setting or command line switch that will force double to behave as long double in the table.