我是靠谱客的博主 无私面包,这篇文章主要介绍C++Primer(5th) Notes - 2.1 基本内置类型,现在分享给大家,希望可以做个参考。

  • 2.1.1 算术类型(arithmetic type)
    • 【1】算术类型的分类
    • 【2】算术类型的尺寸
    • 【3】带/无符号类型
    • 【4】如何选择类型
  • 2.1.2 类型转换
    • 【1】六种类型转换的情况
    • 【2】含有无符号类型的表达式
  • 2.1.3 字面值常量(literal)
    • 【1】整型、浮点型、字符、字符串、布尔、指针字面值
    • 【2】转义序列
    • 【3】指定字面值的类型

@Author:CSU张扬
@Email:csuzhangyang@gmail.com or csuzhangyang@qq.com
@我的网站: https://www.faker.top

2.1 基本内置类型

基本内置类型包括 算术类型 和 空类型 。

2.1.1 算术类型(arithmetic type)

算术类型的分类

内置类型 { 算术类型 { 整型 { 布尔值:  b o o l 字符型:  c h a r ,   w c h a r _ t ,   c h a r 16 _ t ,   c h a r 32 _ t 整型数:  s h o r t ,   i n t ,   l o n g ,   l o n g   l o n g 浮点型:  f l o a t ,   d o u b l e ,   l o n g   d o u b l e 空类型 ( v o i d ) text{内置类型}left{ begin{array}{l} text{算术类型}left{ begin{array}{l} text{整型}left{ begin{array}{l} text{布尔值: }bool\ text{字符型: }char, wchar_t, char16_t, char32_t\ text{整型数: }short, int, long, long long\ end{array} right.\ text{浮点型: }float, double, long double\ end{array} right.\ text{空类型}left( void right)\ end{array} right. 内置类型⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​算术类型⎩⎪⎪⎨⎪⎪⎧​整型⎩⎨⎧​布尔值: bool字符型: char, wchar_t, char16_t, char32_t整型数: short, int, long, long long​浮点型: float, double, long double​空类型(void)​

算术类型的尺寸

算术类型的尺寸在不同机器上有所差距,下表列出 C++ 标准规定的尺寸的最小值。

类型含义最小尺寸
bool布尔类型未定义
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符32位
short短整形16位
int整形16位
long长整形32位
long long(C++11)长整形64位
float单精度浮点数6位有效数字
double双精度浮点数10位有效数字
long double扩展精度浮点数10位有效数字

注意:

  1. 一个 char 大小和一个机器字节一样。
  2. C++规定,一个 int 至少和一个 short 一样大,一个 long 至少和一个 int 一样大,一个 long long 至少和一个 long 一样大。
  3. 通常,float 为32位, double 为64位, long double 为96位或128位。类型 float 和 double 分别有7和16个有效位。

带/无符号类型

  1. int, short, long, long long 都是带符号的,在他们前面加上 unsigned 就可以得到无符号类型。
    注意:类型 unsigned int 可以缩写为 unsigned 。
  2. 字符型分为三种:char, signed char, unsigned char。因为类型 char 是无符号还是带符号的,对于不同编译器来说,是不同的。
    注意:如果你需要一个不大的整数进行运算(算术表达式),明确指定它是 signed char 或者 unsigned char 。

如何选择类型

  1. 明确知道数值不可能为负时,选无符号类型。
  2. 使用 int 进行整数运算。
  3. 在算术表达式中,不要使用 char 或 bool 。如果你需要一个不大的整数进行运算(算术表达式),明确指定它是 signed char 或者 unsigned char 。
  4. 执行浮点数运算选用 double 。因为 float 精度不够且两者计算代价相差无几。

2.1.2 类型转换

六种类型转换的情况

  1. 非布尔->布尔:值为 0 则转换为 false ,否则为 true 。
  2. 布尔->非布尔:值为 flase 则转换为 0 ,值为 true 则为 1 。
  3. 浮点数->整数:去掉小数,只取整数部分。
  4. 整数->浮点数:小数部分记为 0 。若整数超过了浮点数的容量,精度可能会损失。
  5. 当赋给 无符号类型 一个超出它范围的数,结果是该数对 无符号类型表示数值总数 取模后的余数。例如:unsigned char c = -1 ,实际结果是对256取模后的余数,即255。
  6. 当赋给 带符号类型 一个超出它范围的数,结果是未定义的。程序可能继续工作、可能崩溃,也可能产生垃圾数据。
    例如:用 g++ 运行 int b = INT_MAX + 1; , 输出 b = INT_MIN = -2147483648。这意味着在某些编译器下,含有无法预知的行为的程序也能正确执行。

含有无符号类型的表达式

当一个表达式既有无符号数,又有 int 值时,那个 int 值就会转换成无符号数。
把负值转化成无符号数,相当于给一个无符号数赋一个负值,参考上述 5。

例1:

unsigned u = 10;
int i = -42;
cout << u + i << endl;

假设 int 为32位,输出 2 32 − 42 + 10 = 4294967264 2^{32}-42+10=4294967264 232−42+10=4294967264 。

例2:

unsigned u = 1;
int i = -1;
cout << u * i << endl;

假设 int 为32位,输出 ( 2 32 − 1 ) × 1 = 4294967295 (2^{32}-1) times 1=4294967295 (232−1)×1=4294967295 。


2.1.3 字面值常量(literal)

形如 -42 的值被称作 字面值常量 。

整型、浮点型、字符、字符串、布尔、指针字面值

整型字面值可以写作十进制数、八进制数、十六进制数。默认情况下,十进制字面值是带符号数,八进制和十六进制字面值即可能是带符号,也可能是无符号的。

十进制字面值是 int, long, long long 中,最小的那个,前提是能容纳下当前的值。
八进制和十六进制字面值是 int, long, long long, unsigned int, unsigned long, unsigned long long 中,最小的那个,前提是能容纳下当前的值。
若最大的数据类型都放不下,将产生错误。

注意: 类型 short 没有对应的字面值。

默认的,浮点数字面值是一个 double 类型。浮点数字面值表现为一个小数或者科学计数法。
3.14159 ; 2.14159E0 ; 0. ; 0e0 ; .001 。

由单引号括起来的一个字符成为 char 型字面值,双引号括起来的零个或多个字符则是字符串字面值。

true 和 false 是布尔类型的字面值。

nullptr 是指针字面值。

转义序列

  • 不可打印字符:退格等控制字符
  • 特殊含义的字符:单双引号、问号、反斜线等

C++规定的转义序列:
n ta v b " \ ? ' r f

泛华的转义序列,形式是 x 后跟1个或多个十六进制数,或者 后跟着1个、2个、3个八进制数。
例如:7(响铃) 12(换行) 40(空格) x4d(字符M)

若反斜线 后跟的八进制数超过三个,只有前3个构成转义序列。
例如:1234,表示八进制数 123 对应的字符和数字 4 。
x 则会用到后面跟的所有数,不过大多数机器 char 只有8位,x 也不会跟着很多数,超过可能会报错。

指定字面值的类型

字符和字符串字面值:

前缀含义类型
uUnicode 16字符char16_t
UUnicode 32字符char32_t
L宽字符wchar_t
u8UTF-8(仅用于字符串字面常量)char

整型字面值:

后缀最小匹配类型
u 或 Uunsigned
l 或 Llong
ll 或 LLlong long

浮点型字面值:

后缀类型
f 或 Ffloat
l 或 Llong double

注意:

  1. 对于一个整型字面值来说,我们指定的是最小匹配类型,依据当前值选择最小的尺寸。
  2. 我们还行组合后缀使用,例如 UL 为后缀,将根据具体数值选取 unsigned long 还是 unsigned long long。

最后

以上就是无私面包最近收集整理的关于C++Primer(5th) Notes - 2.1 基本内置类型的全部内容,更多相关C++Primer(5th)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(297)

评论列表共有 0 条评论

立即
投稿
返回
顶部