C++基本数据类型列表
ANSI C/C++ 基本数据类型:
Type |
Size |
数值范围 |
无值型 void |
0 byte |
无值域 |
布尔型 bool |
1 byte |
true false |
有符号短整型 short [int] /signed short [int] |
2 byte |
-32768~32767 |
无符号短整型 unsigned short [int] |
2 byte |
0~65535 |
有符号整型 int /signed [int] |
4 byte |
-2147483648~2147483647 |
无符号整型 unsigned [int] |
4 byte |
0~4294967295 |
有符号长整型 long [int]/signed long [int] |
4 byte |
-2147483648~2147483647 |
无符号长整型 unsigned long [int] |
4 byte |
0~4294967295 |
long long |
8 byte |
0~18446744073709552000 |
有符号字符型 char/signed char |
1 byte |
-128~127 |
无符号字符型 unsigned char |
1 byte |
0~255 |
宽字符型 wchar_t (unsigned short.) |
2 byte |
0~65535 |
单精度浮点型 float |
4 byte |
-3.4E-38~3.4E+38 |
双精度浮点型 double |
8 byte |
1.7E-308~1.7E+308 |
long double |
8 byte |
说明:
( 1 )类型修饰符 signed 和 unsigned 用于修饰字符型和整形。
( 2 )类型修饰符 short 和 long 用于修饰字符型和整形。
( 3 )当用 signed 和 unsigned 、 short 和 long 修饰 int 整形时, int 可省略。
( 4 )其中 bool 和 wchar_t 是 C++ 特有的。
( 5 )除上表以外, C/C++ 都可以自定义枚举 enum 、联合 union 和 struct 结构体类型。
( 6 )以上 sizeof 通过 Windows XP 32 位平台测试,其中某些类型数据的字节数和数值范围由操作系统和编译平台决定。比如 16 位机上, sizeof(int) = 2 ,而 32 位机上 sizeof(int) = 4 ; 32 位机上 sizeof(long) = 4 ,而 64 位机上 sizeof(long) = 8 。除此之外,注意 64 位机上的 pointer 占 8byte 。
( 7 ) void 的字面意思是 “ 无类型 ” ,不能用来定义变量。 void 真正发挥的作用在于: <1> 对函数返回和函数参数的限定,例如自定义既不带参数也无返回值的函数 void MyFunc(void);<2> 定义无类型通用指针 void * ,指向任何类型的数据。
( 8 )标准 C++ 库及 STL 还提供了通用数据结构:字符串类 string ;向量类模板 vector ;双端队列类模板 deque ;链表类模板 list ;容器适配器堆栈类 stack (实现先进后出的操作);容器适配器队列类 queue (实现先进先出的操作);集合类 set ;多重集合类 multiset ;映射类 map ;多重映射类 multimap ;位集合 bitset ;迭代器 iterator ( 类似指针的功能 , 对容器的内容进行访问 ) 。
( 9 ) 在标准 c++ 中, int 的定义长度要依靠你的机器的字长,也就是说,如果你的机器是 32 位的, int 的长度为 32 位,如果你的机器是 64 位的,那么 int 的标准长度就是 64 位,而 vc 中 __int64 是为在 32 机位机器长实现 64 位长度的整形数。
( 10 )关于 32 位平台下的 int 和 long
long 从字面上看,应该是 64 位才更合理,把 long 当成 32 位实在是一个历史的包袱。像 C# 那样新起炉灶的程序语言,由于没有需要支持老代码的问题,就把 long 当作 64 位来处理了。
在 32 位平台下, long 是相对 short 而言, long ( short )类型是 long ( short ) int 类型的简称, sizeof(long) = sizeof(int) = 4 。 int 和 long 的范围虽然一样 , 但输入输出格式不同 ,printf int 的格式为 %d ,而 printf long 的格式为 %ld 。
考虑到程序的可移植性,还是要将他们区分开来。但当要求的数值范围为 4byte 时,建议使用 int 类型,因为第一版的 C 语言只有一种类型,那就是 int 。
( 11 )在 Win32 API 及 MFC 中为了使类型名称在语意上更明了,对以上基本类型进行了大量的 typedef 。例如 WINDEF.H 中的 BYTE,WORD,DWORD 。
( 12 )计算机内部内存的基本单位是1byte(8个电子开关)!