前言
C++中有很多数据类型,如int,double,char……今天,我们就去看一看这些数据类型
0.unsigned和signed
unsigned(无符号型)和signed(有符号型)是两个不同的关键字,它们可以被理解为前缀
unsigned 关键字的用法:
unsigned + typename + name;
//即unsigned + 类型名 + 变量名;
加入unsigned后,变量的最大值就扩大了一倍,但最小值变为0了
如:int大小为-pow(2,31) ~ pow(2,31)-1,unsigned int大小为0 ~ pow(2,32)-1
signed关键字的用法:
signed + typename + name;
//即signed + 类型名 + 变量名;
其实加不加signed都差不多,但要记住,signed 加不加是两个不同的数据类型
1.整形
整形的关键字:short,int,long;
1.1短整型
短整型分为:short,signed short,unsigned short
范围分别是:
short,signed short == -2^15 ~ 2^15-1 == -32768 ~ 32767
unsigned short == 0 ~ 2^16-1 == 0 ~ 65535
1.2普通整形
普通整形分为:int,signed int,unsigned int
int,signed int == -2^31 ~ 2^32-1 == -2147483648 ~ 2147483647
unsigned int == 0 ~ 2^32-1 == 0 ~ 4294967295
1.3长整形
长整形与系统有关,32位和64位系统中长整形的范围都不一样
1.3.1 32位系统
long,signed long == -2^31 ~ 2^32-1 == -2147483648 ~ 2147483647 == int,signed int
unsigned long == 0 ~ 2^32-1 == 0 ~ 4294967295 == unsigned int
1.3.2 64位系统
long,signed long == -2^63 ~ 2^63-1 == -9223372036854775808 ~ 9223372036854775807
(等同于long long,signed long long)
unsigned long == 0 ~ 2^64-1 == 0 ~ 18446744073709551615 == unsigned long long
注:64位的unsigned long虽然有值,但在Dev中输出为0
1.4超长整形
超长整形分为:long long,signed long long,unsigned long long
long long,signed long long == -2^63 ~ 2^63-1 == -9223372036854775808 ~ 9223372036854775807
unsigned long long == 0 ~ 2^64-1 == 0 ~ 18446744073709551615
注:unsigned long long虽然有值,但在Dev中输出为0
1.5 __int64
__int64,signed __int64 == -2^63 ~ 2^63-1 == -9223372036854775808 ~ 9223372036854775807
unsigned __int64 == 0 ~ 2^64-1 == 0 ~ 18446744073709551615
2.浮点型
浮点型的关键字:float,double,long
而它们一般都为有符号(即signed)类型
float == 1.17549e-038 ~ 3.40282e+038
double == 1.79769e+308 ~ 2.22507e-308
long double == 1.18973e+4932 ~ 3.3621e-4932
3.布尔型
bool类型比较特殊,它不分有无符号
bool类型的值只有0(false)和1(true)
所有非0整数(负数也算)和true在bool类型中都是真,0和false在bool类型中都是假
4.字符型
字符型包括普通字符型char和宽字符
4.1 char
char,signed char == -128 ~ 127
unsigned char == 0 ~ 255
char类型表面上存储的是一个字符,但实际在内存里存储的是一个ASCLL码值
关于ASCLL码和char的关系,小编在这里贴一张图:
4.2 wchar_t
中文这些占两个字符宽度的字符无法用char类型来存储,所以C++创造了宽字符wchar_t型,专门用来存储占两个字符宽度的字符。
因为小编对wchar_t不太了解,所以有感兴趣的自己去查>:)
各数据类型占用的字节数(sizeof函数)
sizeof()函数能帮助我们找出各类型占用的字节数,其用法为:
sizeof ( typename ) or sizeof typename
以下是各类型对应占用的字节数:
int | 4 |
short | 2 |
long | 4 or 8 |
long long | 8 |
float | 4 |
double | 8 |
bool | 1 |
char | 1 |
wchar_t | 2 |
__int64 | 8 |
long double | 16 |