寒假2 C++primer 第二章 (第一部分)


part 0.写在前面

鉴于第一章的总结内容有些晦涩,甚至写成了没有书就没有办法读懂的‘字典’,所以我将尝试在第二章的叙述中加以改进。

特殊符号解释:

  • ※标内容为拓展内容,会在有星标内容部分以及结尾部分提供相关链接以供有兴趣的小伙伴研究。(内容多半超前很多~ _ ~)
  • *标内容为当前未点明,但在本章中可以找到相应解释的重要内容。

ps:如果小伙伴真的有一些想法或者好的建议,站长的邮箱是可以发送信息的哦!欢迎通过邮箱方式与我取得联系!ヾ(≧▽≦*)o

part 1.摘要

这一章中包含的知识点是有关于变量与基本类型的。什么是变量?书中有严格的定义:

变量,具名对象。

而在本章的开头也强调了这样一件事:很多人把变量与对象分开使用,认为二者有一定的区别;但在实际区分中,往往不能形成统一的标准来进行区别对待。

一些人眼中,对象是始终与男女关系(ಥ _ ಥ),不是,类,绑定在一起。认为在类内定义的变量是对象。还有人认为命名与否是变量与对象的区别方式……

其实这些说法都是公说公有理,婆说婆有理的习惯问题,在此处我沿用书中的介绍方式,不进行刻意区分。

那对于变量,你有什么印象呢?就拿int a这段最简单的代码来说吧!我们通常会说这段代码定义声明了一个基本类型——整型变量,这个变量的名字是a

这样一来,就出现了三个重要知识点,也就是黑体加粗的这三个关键词。在后面的部分里会进行详细的介绍的。

变量类型又不止这一种!那在实际应用中,会出现很多类似于:

double h = 1.2;
int tab = 3;
std :: cout << h + t << std :: endl;

这样的代码,输出的结果会是整型还是浮点型的呢?其中就涉及到了类型转换这个知识点。

然后对于爱好学习的同学,可能已经在网上阅读过不少代码,会发现老师所写的代码和网上大牛分享的代码中有一个明显的区别:const这个东东,网上的代码好像用得特别多!

还有一些切入进计算机内存地址的“高级变量”,指针引用,这些变量类型,也会在本章讲到,当然最痛苦的,莫过于俄罗斯套娃了!指针的指针,指针的引用,指针的const……

那么内置基本类型就有这么多的情况下,我要是突然失忆了,忘记这变量是什么类型了,难道要一点点的去推理吗?我选择狗带X_X,当然有办法了!那就是让我们的编译器小盆友进行推算的处理类型啦!

还有一些小伙伴想要在“大数据时代”里体验一把私人定制的快感,想要给这些基本类型起一个类型别名,想要自己定制一个属于自己的自定义数据结构,我想说,这,也是本章的重要内容哦!

当然,起名并不是随便起的,在C++中对于标识符,也就是自定义的名字有一定的限制。我们也要意识到,对于每个变量来说,都有它自己的出生与消亡的生命周期,有它发挥作用限制的地盘———作用域

以上就是本章的知识点内容总结啦!这些如果都写进一篇文章会很长,所以我将分开上传,希望能对大家有一定帮助!(如果读完还是有问题,可以私信我哦!)

tips:这边建议收藏本站的呢,亲! (/▽\)


part 2.主要知识点总结

Q1:内置基本类型有哪些?

C++定义了包括算术类型与**空类型 * (void)**在内的基本数据类型。

算数类型包含很多种,详见下表(未包含无符号类型 * (unsigned),但无符号类型是内置类型):

类型含义 类型说明符 * 最小尺寸 * 特 性 与 常 用 场 合
布尔类型 bool 未定义 在程序中常作为条件判断语句,只有turefalse两个值
字符 char 8位 就,很常见的字符型变量 (o゚v゚)ノ
宽字符 wchar_t 16位 用于 扩展字符集
Unicode类 char16_t 16位 同wchar_t
Unicode类 char32_t 32位 同wchar_t
短整型 short 16位 一种可表示范围较小的,占内存较少的整数类型
整型 int 16位 只是一个四平八稳,平平无奇的小int罢了(+_+)
长整型 long 32位 一种可表示范围与占据内存空间两方面都比int大的整数类型
长整型 long long 64位 没错,比long还长 (o゚v゚)ノ
单精度浮点型 float 6位 有效数字 一种精度低内存小的浮点类型
双精度浮点型 double 10位有效数字 一种精度较高内存较大的浮点类型,非常常见
扩展精度浮点型 long double 10位有效数字 一种比double还精度高,内存大的浮点类型
  • **空类型:**不对应具体的值,仅用于特殊的场合。最常见的应用就是在函数没有返回值的时候使用空类型作为返回类型。
  • **尺寸:**比特(bit)——>字节(Byte)——>字(word),一般地,有8 bit = 1 Byte ; 2 Byte = 1 word ;
  • **比特:**bit为最小信息单位,每位为0或1。
  • **字节:**最小寻址内存块,指针只能最小以字节为单位来进行间接调用数据内容。一般1字节等于8比特的原因,是因为要求1个字节至少要容纳机器基本字符集中的字符。而(signed) char的大小,之所以最小为8位比特,是因为这种大小去除负数无效部分,正好有128个有效值,可以对应ascll码表中的128个字符,其中,33个为不可显字符,95个为可显字符。
  • **※ 字:**计算机一次运算的单元。也是在申请地址时的基本单位。

对于unsigned类型,会零散在各部分介绍,在此只用知道两件小事:

  1. unsigned类型就是把原类型表达范围内负数部分删去,然后将原来类型所能表达的最大数之后的正数部分,填充到表达范围中。(如:signed char可表示-128~ 127,而unsigned char则可表示0~ 255)
  2. char类型与其它类型不同,被分成了unsigned char, char,signed char三种类型,而对于一般的int类型,就是指带符号类型。而一般的char类型的状态,则带不带符号皆有可能,具体由编译器决定。

Q2:类型转换的规则?

首先,类型转换常发生在赋值语句情况中:

对于bool类型,

#include<iostream>
int main() {bool a = 0;if(a) {std :: cout << "hyjtab 1" << std :: endl;}
a = -1;if(a) {std :: cout << "hyjtab 2" << std :: endl;}
return 0;
}

代码运行之后,屏幕上只会显示“hyjtab2”的字样,说明,对于bool类型来说,只有赋值为0时,才会转化为false,其余情况,全都是true。

而当我们把一个bool类型赋给非bool类型时,true对应1,false对应0。

对于浮点类型,

#include<iostream>
int main() {int h = 12;
double t =1.2;
int a = 0;
a = t;
std :: cout << a << std :: endl;
a = h + t;
std :: cout << a << std ::endl;
std :: cout << h + t << std :: endl;
return 0;
}

代码运行结果为“1,13,13.2",说明,当我们把一个浮点数赋给一个整数类型时,我们进行了近似处理,结果只保留小数点前的部分。

与整型数进行运算时,会将整型数转化为浮点数,得到的转化值小数点后位全为零,然后运算,得出浮点型结果。

对于无符号类型(unsigned),

(代码省略)

  • 除非有符号类型的容量大于无符号类型,在进行运算时,总是将有符号类型转换为无符号类型。

对于赋值超过了本身的最大范围(或容量)的情况,

如果在整型值赋给浮点型时,整数所占空间超过了浮点型的容量,可能损失部分精度。

对于**无符号类型(unsigned)**结果是初始值对无符号类型容量取模后的值。

对于有符号类型,则结果为未定义的,程序可能崩溃,可能产生垃圾数据,也可能继续运行。

类型转换的其它发生条件:

条件语句:

当表达式作为条件时,会发生其它类型转化为bool型的隐性操作。

注意:我们在实际操作中,极有可能以后一不注意,就将负数赋值给了无符号对象,会引发意想不到的错误。还有在计算中,很多情况下,我们会将无符号类型与带符号类型混合计算,这时就要根据无符号类型类型转化规则进行提前推测,得出结果。

小零食:空类型(void)之所以不能访问是因为它只指明了访问的起始地址,而未指明起点向后读取多少内存,以及如何解析二进制数据的问题。而其它数据类型这三个问题的答案都是确切的。

Q3: 字面值常量的类型到底是?

对于整型与浮点型:

整型字面值:

对于整型字面值常量,其类型由符号与值决定,而是否有符号,与进制有一定关系。对于一般的十进制数,默认都是有符号数。而十六进制与八进制数既可能是有符号类也可能是无符号类型。

区分进制方法就是看前缀,十进制数无前缀,而八进制数前缀为0,十六进制数以0x为前缀。

一般的,对于-123这样的数,在内存中的储存形式会认为是123,这里的 - 被认为是一种取负运算。

对于浮点型字面值常量,主要在于精度,识别精度的难度往往在表示方法上,如:1e2,3.14e-1……这里的e,就是一种科学计数法。它们的具体值分别为100,0.314;

然后就到了重点,他们的类型是啥?

对于浮点型字面值,一般都是double类型。

而对于整型:

字面类型 可能类型
整型(10进制) int , long , long long
整型(16进制与8进制) int , unsigned int , long , unsigned long , long long , unsigned long long

具体类型为可能类型中能容纳下该字面值的占内存最小的那一种。

布尔字面值与指针字面值

布尔:truefalse;

指针:nullptr*;

字符与字符串字面值

单引号引起的单字符为字符字面值常量,而双引号中的内容为字符串字面值常量。

转义序列:

有两类字符程序员不能直接使用:一类是不可视字符,如退格以及其它控制字符。一类是在C++中有特别含义的字符。在这些情况下需要用到转义序列。转义序列均以反斜线作为开始。如:\n(换行符),\a(响铃符),\t(制表符)……(详见网络)

转义序列与十六进制和八进制数的对应关系:

又称泛化的转义序列,其形式是\x后紧跟1个或多个十六进制数字,或者\后紧跟1~3个八进制数字,其中,数字部分为字符对应的数值。

我们可以像使用普通字符那样使用转义序列。

指定字面值的类型

字符/字符串

前缀 含义 类型
u Unicode 16字符 char16_t
U Unicode 32字符 char32_t
L 宽字符 wchar_t
u8 UTF-8(仅用于字符串字面值常量) char

整型

后缀 最小匹配类型
u/U unsigned
l/L long
ll/LL long long

浮点型

后缀 类型
f/F float
l/L long double

一个下午,终于写在这里,准备结束了,这只是第二章的第一小节,之后更新的部分将会进入第二章的第二小节。期望不会让你们等太久~

※部分的链接:

  • 6位 ※ 有效数字
  • ※ 字
  • 用于 ※ 扩展字符集

寒假2—c-primer第二章(第一部分)相关推荐

  1. 软件构造 第二章 第一节 软件生命周期和版本控制

    软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process mode ...

  2. 思维导图下载 注册安全_2019安全工程师《建筑实务》第二章第一节考点:物料提升机思维导图...

    2019安全工程师<安全生产专业实务-建筑施工安全>第二章第一节考点:物料提升机思维导图,本节的大部分知识点前两节塔式起重机和施工升降机相似,大家可以对比之前考点的思维导图来理解记忆,本知 ...

  3. 《啊哈!算法》第二章 - 第一节 - 解密QQ号(Java实现)

    <啊哈!算法>第二章 - 第一节- 解密QQ号(Java实现) 解密QQ号--队列 解密QQ号--队列 新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问 QQ号, 小 ...

  4. linux 下  qserialport waitforreadyread_北师大版初中数学八年级(下)第二章第一节不等关系(精品)...

    第二章 一元一次不等式与 一元一次不等式组 2.1不等关系 一.知识点梳理 不等式:一般地,用"<"(或"≤"),">"(或&q ...

  5. 第二章第一节 能把梳子卖给和尚吗

    第二章 能把梳子卖给和尚吗 1.求职遭遇奇妙陷阱 话说刘备大四毕业那年春天,卢植因为得罪了校办公室主任左丰,被指控犯罪批捕入狱,案由涉及男女情色和贪污受贿.直到刘备毕业离校,才因为查无实据而无罪获释. ...

  6. C++ Primer 第二章 学习笔记及习题答案

    知识点 基本内置类型 算数类型:整型(包括布尔型和字符型).浮点型.空类型. 空类型:不对应任何值,常用来当函数不返回任何值时使用空类型作为返回类型. 带符号类型和无符号类型:带符号类型可以表示正数. ...

  7. 第二章第一节:商品数字化CPV方法

    上一章:电商及商品体系概述,我们介绍了电商业务架构和与之匹配的B端及C端产品架构,同时阐述了电商的业价值和商品部分的生态建设机制.这一章开始,我们介绍在业务开展之前,如何将交易对象数字化,如何高效组织 ...

  8. word页码如何设置为章节加页码,例如第一章第一页1-1、第二章第一页2-1

      由于用到word页码分章节+页码的形式,从网上查了一下,质量真的很差,没有一篇文章讲清楚的,有的所答非所问,一怒之下,利用几个小时的时间解决问题并写下这篇文章,以供大家学习参考!!! 1.word ...

  9. c++primer 第二章 变量和基本类型

    2.1基本内置类型 基本数据类型有算数类型和空类型 2.1.1算术类型 算术类型表 内存最小可寻址内存块:字节(byte,大小为8bit):存储单元为4或8字节(32位机上32bit,64位机上64位 ...

  10. 带你玩转区块链--以太坊基础、发币、基于智能合约实现彩票项目-第二章-第一节【以太坊篇】

    意义: 在上一节知识学习中,我们已经了解如何实现一个基础区块链,并重构了BTC关键代码.对比传统的中心化项目,区块链项目拥有很多优势,如:追溯性.不可传篡改性.在中心化项目中的网络协议是:[数据层-- ...

最新文章

  1. ad 原理图差分线_usb hub原理图及pcb设计
  2. java定义final_Java中何时将方法声明为final的
  3. saltstack二
  4. PhotoKit 照片库的管理-获取图像
  5. js open 和close 方法
  6. Linux 命令(12)—— wc 命令
  7. protobuf使用错误总结
  8. hdu 5441 Travel (2015长春网赛)
  9. dell r730 xd 安装vmware esxi 5.5 u1
  10. 20170907wdVBA_ImportPicturesBaseOnExcel
  11. 《塞尔达传说》系列游戏评测
  12. 计算机换算单位 gb,gb和mb的换算-KB,MB,GB之间的换算关系
  13. 360浏览器兼容IE模式下打印去掉页眉页脚
  14. Unity材质:玻璃
  15. C#_____找错误
  16. 【ubuntu】Ubuntu 安装中文输入法
  17. 3月18日面试题复盘
  18. [Java实战][仅需1步]企业微信群机器人[0基础接入]
  19. 致2020年的高考:教育改变命运
  20. Bootstrap Table API 中文版(完整翻译文档)

热门文章

  1. 文件结构,及相关文件的命令
  2. MySQL安装使用学习教程,mysql数据库入门的不二之选
  3. 2013 后苹果 MAC 安装 WINDOWS 教程
  4. 关于用Go做一些OJ时遇到的问题
  5. 资本主义系统的基本结构
  6. 【Linux 内核 内存管理】memblock 分配器编程接口 ⑤ ( memblock_free 函数 | memblock_remove_range 函数 )
  7. 小米手机拦截返回音设置不了_手机老出现闪退怎么办?这样可以解决
  8. 微信公众号配置 Token 认证以及消息推送功能
  9. 11.16 HTML5,CSS3,学习笔记
  10. 图纸管理混乱解决方法