内容摘要
C++基础→变量和基本数据类型→2变量与基本类型→2.1基本内置类型2.1、基本内置类型
C++定义了数据基本内置类型:整型、字符型、浮点型等,同时提供了自定义数据类型的机制。
算术类型
算术类型分两类:整型(字符、布尔型)、浮点型。
布尔类型:bool(true or false)
字符类型:char、wchar_t、char16_t、char32_t
整型:short、int、long、long long(C++ 11)
浮点型:float、double、long double
除去布尔,其他整型从符号的角度,可分为带符号的signed与无符号的unsigned。默认为带符号的,添加unsigned得到无符号类型。
字符型则分为:char、signed char、unsigned char三种。char表现形式是有符号还是无符号,是由编译器决定的。
类型转换
当在程序的某处使用了一种类型其实对象应该是另一种类型时,程序会自动进行类型转换。下表是强行赋值时的情况。
操作 | 结果 |
---|---|
非布尔算术值→布尔型 | 0→false,否则为true |
布尔值→非布尔类型 | false→0,true→1 |
浮点数→整数类型 | 近似出力,保留浮点数小数点前的部分 |
整数值→浮点类型 | 小数部分记为0,可能损失精度 |
赋给无符号类型一个超出它表示范围的值 | 初始值对无符号类型表示数值总数取模后的余数(如8bit大小的unsigned char可以表示0-255区间内的值,如果赋了区间外的值,实际结果是该值对256取模后所得余数) |
赋给带符号类型一个超出它表示范围的值 | 结果是未定义的,可能继续工作,可能崩溃,可能生成垃圾数据 |
含无符号类型的表达式
int型 + unsigned 型 输出结果是int转化为unsigned数后的执行结果,如-1(int)* 1(unsigned) = 4294967295
两个unsigned数相减 结果是取模后的值,如10 - 42 = 4294967264
· 总之,含无符号的运算,要确保结果不能是负值,同时不要混用带符号类型与无符号类型
字面值常量
布尔字面值 true和false
指针字面值 nullptr
整型字面值可写作十进制数、八进制数(以0开头)、十六进制数(以0x或0X开头)的形式,整型字面值具体的数据类型由它的值和符号决定。
十进制 | 八进制 | 十六进制 |
---|---|---|
20 | 024 | 0x14 |
带符号数 | 带符号或无符号 | - |
int、long、long long中能容纳其值得尺寸最小者 | int、unsigned int、long、unsigned long、long long、unsigned long long中能容纳数值的尺寸最小者 | 同左 |
注:short没有对应的字面值; 十进制字面值不会是负数。
浮点型字面值表现为一个小数或以科学计数法表示的指数。
默认,浮点型字面值是double。
3.14159 | 3.14159E0 | 0. | 0e0 | .001 |
字符型字面值是由单引号括起来的一个字符,‘a’,字符串型字面值是由双引号括起来的零个或多个字符,“Hello World! ”。
注:编译器在每个字符串的结尾处添加一个空字符’\0’,字符串字面值得实际长度要+1;
转义序列
有两类字符不能直接使用:1.不可打印的字符,退格等无可视的图符;2.C++中有特殊含义的字符,单引号、双引号、问号、反斜线等,C++中规定的转义序列见下表,这些字符序列被当做一个字符使用。
换行符 | 横向制表符 | 报警符 | 纵向制表符 | 退格符 | 双引号 | 反斜线 | 问号 | 单引号 | 回车符 | 进纸符 |
---|---|---|---|---|---|---|---|---|---|---|
\n | \t | \a | \v | \b | " | \ | ? | ’ | \r | \f |
也可以使用泛化的转义序列,\x加一个或多个十六进制数,或\加1个、2个或3个八进制数。
响铃 | 换行符 | 空格 | 空字符 | 字符M | 字符M |
---|---|---|---|---|---|
\7 | \12 | \40 | \0 | \115 | \x4d |
注:如果反斜线后的八进制数超过3个,只有前3个构成转义序列。
指定字面值的类型
通过添加前缀或后缀,可以改变字面值类型
L’a’ 宽字符型,wchar_t
u8"hi!" utf-8字符串
42ULL 无符号整型
1E-3F 单精度浮点型,float
3.14159L 扩展精浮点型, long double
用于指定字面值类型的前缀或后缀如下表。
字符和字符串字面值:
前缀 | 含义 | 类型 |
---|---|---|
u Unicode | 16字符 | char16_t |
U Unicode | 32字符 | char32_t |
L | 宽字符 | wchar_t |
u8 UTF-8 | - | char |
整型和浮点型字面值:
后缀 | 最小匹配类型 |
---|---|
u or U | unsigned |
l or L | long |
ll or LL | long long |
f or F | float |
l or L | long double |