Data Type Ranges

For 32-bit and 64-bit compilers, Microsoft Visual C++ recognizes the types shown in the table below. Note that the following type also have unsigned forms:

  • int (unsignedint)

  • __int8 (unsigned__int8)

  • __int16 (unsigned__int16)

  • __int32 (unsigned__int32)

  • __int64 (unsigned__int64)

  • short (unsignedshort)

  • long (unsignedlong)

  • longlong (unsignedlonglong)

Type Name

Bytes

Other Names

Range of Values

int

4

signed

–2,147,483,648 to 2,147,483,647

unsigned int

4

unsigned

0 to 4,294,967,295

__int8

1

char

–128 to 127

unsigned __int8

1

unsigned char

0 to 255

__int16

2

short, short int, signed short int

–32,768 to 32,767

unsigned __int16

2

unsigned short, unsigned short int

0 to 65,535

__int32

4

signed, signed int, int

–2,147,483,648 to 2,147,483,647

unsigned __int32

4

unsigned, unsigned int

0 to 4,294,967,295

__int64

8

long long, signed long long

–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

unsigned __int64

8

unsigned long long

0 to 18,446,744,073,709,551,615

bool

1

none

false or true

char

1

none

–128 to 127 by default

0 to 255 when compiled with /J

signed char

1

none

–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

long long

8

none (but equivalent to __int64)

–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

unsigned long long

8

none (but equivalent to unsigned __int64)

0 to 18,446,744,073,709,551,615

enum

varies

none

See Remarks.

float

4

none

3.4E +/- 38 (7 digits)

double

8

none

1.7E +/- 308 (15 digits)

long double

same as double

none

same as double

wchar_t

2

__wchar_t

0 to 65,535

A variable of __wchar_t designates a wide-character or multibyte character type. By default wchar_t is a typedef for unsignedshort. Use the L prefix before a character or string constant to designate the wide-character-type constant. When compiling with /Zc:wchar_t or /Za, the compiler can distinguish between an unsignedshort and wchar_t for function overload purposes.

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

The int and unsignedint types have the size of the system word: four bytes. 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.

See Fundamental Types for more information on the restrictions of the sizes of each type.

The range of enumerated types varies depending on the language context and specified compiler flags. In C and C++ non-CLR enumerations, enumeration constants and values of enumerated types are expressed in terms of type int. C++ CLR enumerations may be backed by a specified scalar type. The range of an enumeration is defined as the smallest and largest values that can be stored in the bit-fields of the smallest and largest of its enumerators. However, the C++ compiler will allow any value within the range of the backing type of the enumeration to be specified (this may require a cast). For more information, refer to C Enumeration Declarations and C++ Enumeration Declarations.

See Also

Concepts

C++ Keywords

Fundamental Types