Data Type Ranges

C/C++ recognizes the types shown in the table below.

Type Name Bytes Other Names Range of Values
int * signed,
signed int
System dependent
unsigned int * unsigned System dependent
__int8 1 char,
signed char
–128 to 127
__int16 2 short,
short int,
signed short int
–32,768 to 32,767
__int32 4 signed,
signed int
–2,147,483,648 to 2,147,483,647
__int64 8 none –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
char 1 signed char –128 to 127
unsigned char 1 none 0 to 255
short 2 short int,
signed short int
–32,768 to 32,767
unsigned short 2 unsigned short int 0 to 65,535
long 4 long int,
signed long int
–2,147,483,648 to 2,147,483,647
unsigned long 4 unsigned long int 0 to 4,294,967,295
enum * none Same as int
float 4 none 3.4E +/- 38 (7 digits)
double 8 none 1.7E +/- 308 (15 digits)
long double 10 none 1.2E +/- 4932 (19 digits)

The long double data type (80-bit, 10-byte precision) is mapped directly to double (64-bit, 8- byte precision) in Windows NT, Windows 98, and Windows 95.

Signed and unsigned are modifiers that can be used with any integral type. The char type is signed by default, but you can specify /J (compiler option) to make it unsigned by default.

The int and unsigned int types have the size of the system word. This is two bytes (the same as short and unsigned short) in MS-DOS and 16-bit versions of Windows, and 4 bytes in 32-bit operating systems. However, portable code should not depend on the size of int.

Microsoft C/C++ also features support for sized integer types. See __int8, __int16, __int32, __int64 for more information. Also see Integer Limits.