基本内置类型
1. 算术类型
【区分】
1 Byte (字节)= 8 bit(比特数)
字 由4或者8字节构成
算术类型分为整型和空类型
1.1 整型
1.1.1 布尔类型
【bool】
没有最小尺寸
取值只有真(true)或者假(false)
1.1.2 字符型
char 字符
扩展字符集:
①wchar_t 宽字符
Unicode字符:
②char16_t
③char32_t
1.1.3 整型
short
int
long
long long
1.2 浮点型
单精度 float(1个字) 7个有位数字
双精度 double(2个字) 16个有位数字
扩展精度值 long double(3或者4个字) 按照需求实现
1.3 带符号类型与无符号类型
带符号类型signed 包括 正数、负数、0
无符号类型unsigned 包括 正数 与 0
1.3.1 “特殊”的字符型
字符型分为以下三种:
char
signed char
unsigned char
char 与 unsigned char 不同,由于字符划分三类,但是只有俩种符号类型,所以:
char类型由编译器自身决定是否带符号
1.3.2 与"理论"不同的unsigned char
理论上是 -127到127
实际应用中为 -128到127
1.4 类型选择
①如果数值超过 int 型的范围,那么选择 long long 型。
②算术表达式里面尽量避免bool和char。
因为char型在一些机器上是无符号,在一些机器上面是有符号,所以使用unsigned char 或者 signed char有利于区别符号。
③当为浮点型的时候,用 double 型。
1.5 类型转换
1.5.1 布尔类型与非布尔类型
非布尔型转化布尔型:
只要该值不为0,则全为true,如果该值为0,则为false。
布尔型转化非布尔型:
初始值为false,为0;初始值为true,为1。
2 字面值常量 – “一望而知”
每个字面值常量都对应一个数据类型
字符常量的形式和值决定了它的数据结构
2.1整型和浮点型字面值
以0开头是八进制(020)
以0x或者0X开头是十六进制(0x67)
十进制字面值的类型:int ,long, long long 里面尺寸最小(int)
short 没有字面值常量
严格而言:十进制字面值常量没有负数
-42是负字面值常量,但负号不在字面值常量中
它的作用仅仅只是字符值取负值而已。
浮点型字面值是一个 double ,用科学计数法表示的指数,指数部分用e或者E表示:
1.23e3 == 1230
2.2 字符和字符串字面值
字符字面值:‘ a ’
字符串字面值: ” a “
字符串字面值的实际长度要比它的内容多一
例如:” a “ = ‘ a ’ + ‘ \0 ’ (空字符)
多行字符串字面符:
std::cout << "a really things "
"that is ...." << std::endl;
2.3 转义序列
不能直接使用的俩种:
1 . 不可打印的字符
没有可视的图符,比如退格或者其他控制字符
2 . 特殊含义的字符
单引号,双引号,问号,反斜线
转义序列:以反斜线为开始
\ \ (反斜线)
\ ? (问号)
\n (换行)
\ " (双引号)
\ ’ (单引号)
\ x 后面紧跟一个或者多个十六进制数字
\ 后面跟一个,俩个或者三个八进制数字(多于3个数字,只纳入3个有效)
例子:
\ 115(字符M)
\ x4d(字符M)
\ 7(响铃)
\ 12(换行符)
\ 0(空字符)
std::cout << "hi, \x4d O \115 ! " << std::endl;
//输出:hi, M O M !
2.4 布尔字面值和指针字面值
布尔类型的字面值:true和false
指针字面值:nullptr