See More

--- description: "Learn more about: Data Type Ranges" title: "Data Type Ranges" ms.date: "05/28/2020" helpviewer_keywords: ["float keyword [C++]", "char keyword [C++]", "unsigned long", "__wchar_t keyword [C++]", "unsigned short int [C++]", "enum keyword [C++]", "unsigned char keyword [C++]", "integer data type [C++], data type ranges", "int data type", "data types [C++], ranges", "unsigned int [C++]", "short data type", "short int data", "signed types [C++], data type ranges", "long long keyword [C++]", "long double keyword [C++]", "double data type [C++], data type ranges", "signed short int [C++]", "unsigned short", "sized integer types", "signed int [C++]", "signed long int [C++]", "signed char keyword [C++]", "wchar_t keyword [C++]", "long keyword [C++]", "ranges [C++]", "unsigned types [C++], data type ranges", "floating-point numbers [C++]", "data type ranges", "ranges [C++], data types", "long int keyword [C++]", "unsigned long int [C++]"] ms.assetid: 3691ceca-05fb-4b82-b1ae-5c4618cda91a --- # Data Type Ranges The Microsoft C++ 32-bit and 64-bit compilers recognize the types in the table later in this article. - **`int`** (**`unsigned int`**) - **`__int8`** (**`unsigned __int8`**) - **`__int16`** (**`unsigned __int16`**) - **`__int32`** (**`unsigned __int32`**) - **`__int64`** (**`unsigned __int64`**) - **`short`** (**`unsigned short`**) - **`long`** (**`unsigned long`**) - **`long long`** (**`unsigned long long`**) If its name begins with two underscores (`__`), a data type is non-standard. The ranges that are specified in the following table are inclusive-inclusive. |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 by using [`/J`](../build/reference/j-default-char-type-is-unsigned.md)| |**`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| | |**`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| Depending on how it's used, a variable of **`__wchar_t`** designates either a wide-character type or multibyte-character type. Use the `L` prefix before a character or string constant to designate the wide-character-type constant. **`signed`** and **`unsigned`** are modifiers that you can use with any integral type except **`bool`**. Note that **`char`**, **`signed char`**, and **`unsigned char`** are three distinct types for the purposes of mechanisms like overloading and templates. The **`int`** and **`unsigned int`** types have a size of four bytes. However, portable code should not depend on the size of **`int`** because the language standard allows this to be implementation-specific. C/C++ in Visual Studio also supports sized integer types. For more information, see [`__int8, __int16, __int32, __int64`](../cpp/int8-int16-int32-int64.md) and [Integer Limits](../cpp/integer-limits.md). For more information about the restrictions of the sizes of each type, see [Built-in types](../cpp/fundamental-types-cpp.md). The range of enumerated types varies depending on the language context and specified compiler flags. For more information, see [C Enumeration Declarations](../c-language/c-enumeration-declarations.md) and [Enumerations](../cpp/enumerations-cpp.md). ## See also [Keywords](../cpp/keywords-cpp.md)
[Built-in types](../cpp/fundamental-types-cpp.md)