我是靠谱客的博主 无私面包,最近开发中收集的这篇文章主要介绍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位。类型 floatdouble 分别有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. 在算术表达式中,不要使用 charbool 。如果你需要一个不大的整数进行运算(算术表达式),明确指定它是 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 23242+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 (2321)×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 型字面值,双引号括起来的零个或多个字符则是字符串字面值。

truefalse 是布尔类型的字面值。

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) Notes - 2.1 基本内置类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部