21 out of 25 rated this helpful - Rate this topic

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 (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)

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 unsigned short. 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 unsigned short 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 unsigned int 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.

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
what about size_t?
size_t is a fundamental type (it's the type returned by the sizeof operator - that's fundamental to the language), but it's not defined here. $0$0 $0 $0It appears to be 4 bytes when running 32-bit and 8 bytes when running 64-bit - that's an important distinction.$0

Edit:: IntelliSence from VC++ 2010 Express giving the following expression for size_t

typedef unsigned int size_t

This means size_t is defined by machine local unsigned int. Thus explains the 4 bytes on 32-bit OS and 8 bytes on 64-bits fact. Also, this means size_t is a derived type against your claim that size_t is a fundamental type. As a matter of fact, size_t has always been a derived type for programming purpose, code clearance and readbility in most cast. This is a fact even for C and pre-standard C++.
Visual Basic 9 Equivalents for PInvoke

MSDN Type Visual Basic 9 Type
ATOM UShort
BOOL Integer
BOOLEAN Byte
BYTE Byte
CALLBACK Delegate
CHAR SByte
COLORREF UInteger
CONST Const
DWORD UInteger
DWORDLONG ULong
DWORD_PTR UInteger (ULong)
DWORD32 UInteger
DWORD64 Long
FLOAT Single
HACCEL IntPtr
HALF_PTR Short (Integer)
HANDLE IntPtr
HBITMAP IntPtr
HBRUSH IntPtr
HCONV IntPtr
HCONVLIST IntPtr
HCURSOR IntPtr
HDC IntPtr
HDDEDATA IntPtr
HDESK IntPtr
HDROP IntPtr
HDWP IntPtr
HENHMETAFILE IntPtr
HFILE Integer
HFONT IntPtr
HGIDOBJ IntPtr
HGLOBAL IntPtr
HHOOK IntPtr
HICON IntPtr
HINSTANCE IntPtr
HKEY IntPtr
HKL IntPtr
HLOCAL IntPtr
HMENU IntPtr
HMETAFILE IntPtr
HMODULE IntPtr
HMONITOR IntPtr
HPALETTE IntPtr
HPEN IntPtr
HRESULT Integer
HRGN IntPtr
HRSRC IntPtr
HSZ IntPtr
HWINSTA IntPtr
HWND IntPtr
INT_PTR Integer (Long)
INT32 Integer
INT64 Long
LANGID UShort
LCID UInteger
LGRPID UInteger
LONG Integer
LONGLONG Long
LONG_PTR Integer (Long)
LONG32 Integer
LONG64 Long
LPARAM Integer (Long)
LPBOOL ByRef Integer
LPBYTE ByRef Byte
LPCOLORREF UInteger
LPCSTR ByRef SByte
LPCTSTR ByRef Char
LPCWSTR ByRef Char
LPDWORD UInteger
LPHANDLE ByRef IntPtr
LPINT Integer (Long)
LPLONG Integer
LPSTR ByRef SByte
LPTSTR ByRef Char
LPVOID IntPtr
LPWORD UShort
LPWSTR ByRef Char
LRESULT Integer (Long)
PBOOL Integer (Long)
PBOOLEAN ByRef Byte
PBYTE ByRef Byte
PCHAR ByRef SByte
PCSTR ByRef SByte
PCTSTR ByRef Char
PCWSTR ByRef Char
PDWORD UInteger
PDWORDLONG ByRef ULong
PDWORD_PTR ByRef UInteger (ULong)
PDWORD32 ByRef UInteger
PDWORD64 ByRef Long
PFLOAT ByRef Single
PHALF_PTR ByRef Short (Integer)
PHANDLE ByRef IntPtr
PHKEY ByRef IntPtr
PINT Integer (Long)
PINT_PTR ByRef Integer (Long)
PINT32 ByRef Integer
PINT64 ByRef Long
PLCID UInteger
PLONG Integer
PLONGLONG ByRef Long
PLONG_PTR ByRef Integer (Long)
PLONG32 ByRef Integer
PLONG64 ByRef Long
POINTER_32 (IntPtr)
POINTER_64 IntPtr
POINTER_SIGNED IntPtr
POINTER_UNSIGNED UIntPtr
PSHORT Short
PSIZE_T ByRef UInteger (ULong)
PSSIZE_T ByRef Integer (Long)
PSTR ByRef SByte
PTBYTE ByRef Char
PTCHAR ByRef Char
PTSTR ByRef Char
PUCHAR ByRef Byte
PUHALF_PTR ByRef UShort (UInteger)
PUINT ByRef UInteger
PUINT_PTR ByRef UInteger (ULong)
PUINT32 ByRef UInteger
PUINT64 ByRef ULong
PULONG UInteger
PULONGLONG ByRef ULong
PULONG_PTR ByRef UInteger (ULong)
PULONG32 ByRef UInteger
PULONG64 ByRef ULong
PUSHORT UShort
PVOID IntPtr
PWCHAR ByRef Char
PWORD UShort
PWSTR ByRef Char
SC_HANDLE IntPtr
SC_LOCK IntPtr
SERVICE_STATUS_HANDLE IntPtr
SHORT Short
SIZE_T UInteger (ULong)
SSIZE_T Integer (Long)
TBYTE Char
TCHAR Char
UCHAR Byte
UHALF_PTR UShort (UInteger)
UINT UInteger
UINT_PTR UInteger (ULong)
UINT32 UInteger
UINT64 ULong
ULONG UInteger
ULONGLONG ULong
ULONG_PTR UInteger (ULong)
ULONG32 UInteger
ULONG64 ULong
UNICODE_STRING Structure UNICODE_STRING : Dim Lenght As UShort, MaximumLenght As UShort, ByRef Buffer As Char : End Structure
USHORT UShort
USN Long
VOID Object
WCHAR Char
WIANPI Delegate
WORD UShort
WPARAM UInteger (ULong)

2 types means 32bit plaform (64bit platform)
Assumes #Unicode directive
Assumest highest Windows version possible

See full table http://spreadsheets.google.com/ccc?key=pK5CEcdG9GYGeO7K2dmEcBg