持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
每次阅读《C++ prime》这本大部头都会有不同的收获,这次再来一次重读,计划用一个月的时间。并在掘金平台上面把自己的读书笔记也给分享出来。
第Ⅰ部分 C++基础
这一部分是基础中的基础,很重要,但也常常会被忽略。每次重读都会找到新的收获,正如候捷老师所说:万丈高楼平地起,勿在浮沙筑高台。
第二章 变量和基本类型
数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作(任何的程序本质上都是处理数据,编程语言中的变量和基本类型就是规定将被处理的数据在语言层面需要是什么样的),同时决定了程序中数据和操作的意义(运算符作用在不同的数据类型上的效果可能不一样)。
2.1 基本内置类型
算数类型:字符,整型数,浮点数,布尔值。
空类型:仅运用于特定场合。
2.1.1 算数类型
算数类型分为两类:整型(字符,整型数,布尔值)和浮点型(浮点数)。(分类的依据应该是数据在内存中的表达方式不一样)
算数类型的尺寸(所占的比特数)由编译器和机器决定,但在C++标准中规定了最小尺寸。
C++算数类型
| 类型 | 含义 | 最小尺寸 |
|---|---|---|
| bool | 布尔类型 | 未定义 |
| char | 字符 | 8位 |
| wchar_t | 宽字符 | 16位 |
| char16_t | Unicode字符 | 16位 |
| char32_t | Unicode字符 | 32位 |
| short | 短整型 | 16位 |
| int | 整型 | 16位 |
| long | 长整型 | 32位 |
| long long | 长整型 | 64位 |
| float | 单精度浮点数 | 6位有效数字 |
| double | 双精度浮点数 | 10位有效数字 |
| long double | 扩展精度浮点数 | 10位有效数字 |
测试环境:Win11 64位+ MVC,使用sizeof测量大小(返回字节数,8个比特(bit)为一个字节(byte),2个字节为一个字(word))。
布尔类型(bool)的取值为真或为假,测试大小为1个字节。
char类型是基本的字符类型,需要确保能够存放ASKII码中的任意一位(编码0~256),所以一个char的大小和一个机器字节一样。测试大小为1个字节(编译器为了保证兼容性,将64位机处理为32位机)。
其他字符也需要确保能够存放对应编码中的任意一位,其最小尺寸取决于编码表,
对于整型:规定 short <= int <= long <= long long 且需要满足表中的条件,在测试中为,2,4,4,8。
对于浮点数:只规定了需要保留的有效数字,具体的实现需要依赖于浮点表示法的不同,在测试中float,double,long double 的大小为 4,8,8。
带符号数和无符号数:带符号数可以表示负数,无符号数不可以。在基本类型上添加unsigned 即得到无符号数。char类型的实际实现上大多数是unsigned char。
在选择数据类型的时候要结合实际的运用场景,选取合适的范围,同时结合效率的考量。