一:基本数据类型:
一:算术类型
1.整型
2.浮点型
二:空类型
算术类型 | ||
类型 | 含义 | 最小尺寸 |
bool | 布尔类型 | 未定义 |
char | 字符 | 8位 |
wchar_t | 宽字符 | 16位 |
char16_t | Unicode字符 | 16位 |
char32_t | Unicode字符 | 32位 |
short | 短整型 | 16位 |
int | 整形 | 16位 |
long | 长整型 | 32位 |
long long(C11新特性) | 长整型 | 64位 |
float | 单精度浮点型 | 6位有效数字(一个字) |
double | 双精度浮点型 | 10位有效数字(二个字) |
long double | 扩展精度浮点型 | 10位有效数字(三或四个字) |
除去布尔型与字符型外,其余整型可以划分为带符号(signed)
和 无符号(unsigned) 两种。
带符号(signed) :可以表示正数,负数或0
无符号(unsigned):仅能表示大于等于0的值
二:类型转换:
注意:
1:当赋值给无符号类型一个超出它表示的范围时,结果是初始值对无符号类型表示数值总
数取模后的余数。
2:当赋值给带符号类型一个超出它表示范围的值时,结果是未定义的,此时,程序可能继
续工作,可能崩溃,也可能生成垃圾数据。
3:如果表达式里既有带符号类型又有无符号类型,当带符号类型取值为负时会出现异常结
果,因为带符号数会自动的转换成无符号数。
举例:
1:初始化:unsigned char c = -1; //如果char为8比特,c的值为255
2:初始化:signed char c = 256; //如果char为8比特,c的值是未定义的
3:unsigned int b = 1; int a = -1; a * b = 4294967295
三:字面值常量:
1:整型与浮点型字面值
可以将整型字面值写作十进制,八进制或十六进制。 以0开头的是八进制,以0x或0X开头的
为十六进制,默认情况下,十进制是带符号型的,而八进制与十六进制根据编译器而定。
2:字符与字符串字面值
由单引号括起来的一个字符称为char型,双引号括起来的零个或多个字符则为字符串型。
注意:
字符串实际上是由常量字符构成的数组,每个字符串结尾处添加一个空字符(’\0‘),因
此,字符串字面值的实际长度要比它的内容多1;
四:转义序列:
有两类字符程序员不可以直接使用
一:不可打印字符,如退格或其他控制字符
二:在语言中有特殊含义的字符(单引号,双引号,问好,反斜杠)
换行符 | \n | 问号 | \? |
纵向制表符 | \v | 进纸符 | \f |
反斜杠 | \\ | 报警符 | \a |
回车符 | \r | 双引号 | \" |
横向制表符 | \t | 单引号 | \' |
退格符 | \b |
泛化的转义序列:形式为 \x后紧跟一个或多个十六进制数字,或者 \ 后紧跟一个,两个或
三个八进制字符。
\7 | 响铃 | \12 | 换行 | \40 | 空格 |
\0 | 空字 | \115 | 字符M | \x4d | 字符M |
五:指定字面值的类型:
通过添加前缀与后缀,可以改变整型,浮点型和字符型字面值的默认类型
字符和字符串字面值 | |||
前缀 | 含义 | 类型 | |
u | Unicode16字符 | char16_t | |
U | Unicode32字符 | char32_t | |
L | 宽字符 | wchar_t | |
u8 | UTF-8(仅用于字符串) | char | |
整型字面值 | 浮点型字面值 | ||
后缀 | 最小匹配类型 | 后缀 | 类型 |
u or U | unsigned | f 或 F | float |
l or L | long | l 或 L | long double |
ll or LL | long long |
六:布尔字面值和指针字面值:
bool:true,flase
指针:nullptr