《C++ Primer Plus》《3、数据处理》
文章目录
- 0 前言
- 1 简单变量
- 1.1变量名
- 1.2整型
- 1.3整型short,int,long和long long
- 1.4无符号类型
- 1.5选择整型类型
- 1.6整型字面值
- 1.7C++如何确定常量的类型
- 1.8char类型:字符和小整数
- 1.9bool类型
- 2 cost限定符
- 3浮点数
- 3.1书写浮点数
- 3.2浮点类型
- 3.3浮点常量
- 3.4浮点数的优缺点
- 4 C++算数运算符
- 4.1运算符优先级和结合性
- 4.2除法分支
- 4.3求模运算符
- 4.4类型转换
- 4.5 auto声明
- 5 总结
- 6 参考
0 前言
本章依然介绍C++的基础用法,C++的变量类型有2中:基本类型和复合类型,本章主要介绍基本类型, 整数和浮点数。
1 简单变量
在实际生活中,我们通常要记录一个数据,比如今天的温度,饭菜的价格,比如今天室外温度23℃,变量是温度,数值是23,计算机记录多了一个操作,他要标记温度是何种类型的数值。所以对于计算机而言,关键的三个属性:信息存储在哪里,要存储声明数值,存储何种类型的信息。
1.1变量名
变量的命名原则是见文知意,看到这个变量的名称,大概就会知道这个变量是表示什么样的数值。C++命名需要遵循以下规则:
- 1)变量名称只能使用字母,数字,和下划线_;
- 2)变量的第一个字符不能是数字;
- 3)区分大小写;
- 4)不能用C++关键字作为变量名;
- 5)C++对于名称的长度没有限制,但有些平台有长度限制;
- 6)以一个下划线打头的名称,用作全局标识符。
1.2整型
整数就是没有小数部分的数字,C++基本整型,按宽度递增为char,short,int,long和C++11新增的long,
1.3整型short,int,long和long long
对于这些数据类型在不同的平台所展现的数据位数可能不一样,但约定了最小长度;
- 1)short至少16位;
- 2)int至少与short一样长;
- 3)long至少32位,且至少与int一样长;
- 4)long long 至少64位,且至少与long一样长。
1.4无符号类型
对于非负的数字,用无符号整型可以有效地扩大表示范围,例如short表示的范围是-32768——32767,而unsigned short的表示范围是0——65535,注意:只有当数字不会变负时,才可以使用无符号类型的变量。
整型溢出:

1.5选择整型类型
int被设置为计算机最“自然“的长度,对于大量的数据类型操作,int处理的会最快。当然遇到一些大型整数数组时,可以考虑使用short,这样会大大缩减存储空间。
1.6整型字面值
首位是1-9,10进制
首位是0,8进制
首位是0X,0x,16进制
1.7C++如何确定常量的类型
一个普通的数字默认为int类型;首先看后缀,若是有特定的后缀,则遵从后缀的格式;否则看数据的长度,如果数据的长度超过int类型,则自动转为long类型。
1.8char类型:字符和小整数
char类型是专门为存储字符而设计的对应的是ASCII表。但是有些像中文系统等需要用到wchar_t,这是一种较大的扩展字符集,它拥有足够的空间可以表示系统使用的最大扩展字符集。
1.9bool类型
bool类型有两种:true,false,通常情况下默认1是true,0是false,实际上任何非零值,都可以表示位true。
2 cost限定符
用const限定符来表示常量,常量被初始化后,其数值就被固定了,编译器将不允许再修改该常量的数值。
创建常量名的通用格式如下:
const type name = value,应该在声明中就对变量进行初始化。
3浮点数
浮点类型是基本类型的第二大类型,浮点数能够表示带小数部分的数字。
3.1书写浮点数
有2种方法,一种是常用的标准小数点表示方法;
第二种叫作E表示方法(E表示法适合非常大或者非常小的数字)
3.2浮点类型
浮点类型有3种:float,double,long double类型,根据实际要求进行选取。
3.3浮点常量
如果希望存储为float类型,用f或者F后缀;希望为long类型,用l或者L后缀。
3.4浮点数的优缺点
优点:表示整数之间的数值;因为有缩放因子,所以可以表示的范围大得多。
缺点:运算速度比整数慢,精确度降低
4 C++算数运算符
C++中的算术运算符与C一样,主要是+,-,*,/和%(求模运算符),这些基本都在小学中有学过,下面进行具体的介绍。
4.1运算符优先级和结合性
一般情况下,为了确保不出错,都会用括号将表达式括起来,在特殊情况下可能表达式会比较复杂,*,/,%的运算优先级相同,+,-的运算优先级相同,前者的优先级高于后者。
4.2除法分支
除法运算上有一些特殊的规定。2个除数都是整数,则运算结果也是整数,会丢弃一些小数部分。但是除数与被除数只要一方是浮点型,则最终的结果便是浮点型。(在C++中,浮点型数据不做特殊说明就是double类型的数据)。
4.3求模运算符
求模运算符,是整数除法剩余的余数,这是他的运算概念,当然他的运用场景仅限于整数。

4.4类型转换
1)初始化和赋值进行的转化
初始化和赋值进行的转换,以short和long为例。将short的值赋值给long,通常会将short类型的变量进行拓展,而不会改变这个变量的大小。但是将long类型的数值赋值给short类型的变量,short类型的变量可能会丢失数据,会带来潜在的风险。

2)以{}方式初始化进行的转化
{}使用大括号的初始化称为列表初始化,这种初始化用于给复杂的数据类型提供数值列表,他对类型转换的要求更为严格,我的理解,这种转化不允许数据丢失。
3)表达式中的转化
当同一个表达式中出现两种不同的算术类型时,C++会执行两种不同的转换;首先,一些类型在出现时便会自动转化,其次有些类型在于其他类型同时出现时在表达式中会被转换掉。
a.自动转化
在C++中,会将bool,char,unsigned char,signed char和short值转化为int(计算机使用这种类型运算会最快)。
b.不同类型变量放在一起后的转化
例如int与double两种类型相加时,相加后的结果会自动转换成较大的数据类型(double)。
4)传递参数的转化
为了保持与传统C语言代码的兼容性,例如会将float参数提升为double。
5)强制类型转化
在C中就学过强制类型抓换,在C++中有三种转换方式,举一个例子,声明一个int型的变量x
a.(long) x //C方式的强制类型转换
b.long (x) //C++方式的强制类型转换
c.static_cast<long>(x);//C++方式的强制类型转换
运算符 static_cast<typename>(value) //convert value to typename type;
4.5 auto声明
在初始化声明中,使用关键词auto,而不指定变量的类型,编译器便将变量的类型设置与初始值相同。
auto n = 100; // n is int
auto x = 1.5; //x is double
auto y = 1.3e12L; //y is long double
5 总结
C++的基本类型大致分为两种:整型、浮点型。整型有bool,char,signed char,unsigned char,short,unsigned short,int,unsigned int,long,unsigned long以及新增的long long和unsigned long long。浮点型有float,double,long double。也介绍了运算符以及运算符的优先级,以及不同数据类型直接的转换,为下面讲复合类型打下了基础。
6 参考
《C++ Primer Plus》
相关文章:
《C++ Primer Plus》《3、数据处理》
文章目录 0 前言1 简单变量1.1变量名1.2整型1.3整型short,int,long和long long1.4无符号类型1.5选择整型类型1.6整型字面值1.7C如何确定常量的类型1.8char类型:字符和小整数1.9bool类型 2 cost限定符3浮点数3.1书写浮点数3.2浮点类型3.3浮点常量3.4浮点数的优缺点 4…...
Java 正则匹配sql
文章目录 正则匹配sql表名称insert intoupdate 正则表达式什么时候要加^$ 在线正则校验 正则匹配sql表名称 insert into insert into PING_TABLE (CODE, NAME) VALUES(0, 待提交),(1, 审核中),(2, 审核通过),(3, 已驳回); regex -> insert\sinto\s(\w)\s*\(?update upda…...
服务器入门
入门服务器管理涉及到一系列基础概念和技能,这包括操作系统、网络配置、安全性、远程访问等。以下是一些建议,可以帮助你开始学习服务器管理: ### 1. **选择合适的操作系统:** - 大多数服务器使用 Linux 操作系统,…...
云端录制直播流视频,上传云盘
前言 哪一天我心血来潮,想把我儿子学校的摄像头视频流录制下来,并保存到云盘上,这样我就可以在有空的时候看看我儿子在学校干嘛。想到么就干,当时花了一些时间开发了一个后端服务,通过数据库配置录制参数,…...
【靶场实战】Pikachu靶场XSS跨站脚本关卡详解
Nx01 系统介绍 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。 Nx02 XSS跨站脚本概述 Cross-Site Scripting 简称为“CSS”ÿ…...
蓝桥杯每日一题-----数位dp
前言 今天浅谈一下数位dp的板子,我最初接触到数位dp的时候,感觉数位dp老难了,一直不敢写,最近重新看了一些数位dp,发现没有想象中那么难,把板子搞会了,变通也会变的灵活的多! 引入…...
sklearn 计算 tfidf 得到每个词分数
from sklearn.feature_extraction.text import TfidfVectorizer# 语料库 可以换为其它同样形式的单词 corpus [list(range(-5, 5)),list(range(-6,4)),list(range(12)),list(range(13))]# corpus [ # [Two, wrongs, don\t, make, a, right, .], # [The, pen, is, might…...
Qt拖拽事件,实现控件内项的相互拖拽
文章目录 1拖拽演示2 步骤3 实现 这里主要以QTableview控件为例,实现表格内数据的相互拖拽。 1拖拽演示 2 步骤 自定以QTableView类,在自定义类中重写拖拽事件: void dropEvent(QDropEvent *event); void dragEnterEvent(QDragEnterEvent *…...
基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道
基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道 相关链接 OFDM中的帧(frame)、符号(symbol)、子载波(subcarriers)、导频…...
Redis核心技术与实战【学习笔记】 - 21.Redis实现分布式锁
概述 在《20.Redis原子操作》我们提到了应对并发问题时,除了原子操作,还可以通过加锁的方式,来控制并发写操作对共享数据的修改,从而保证数据的正确性。 但是,Redis 属于分布式系统,当有多个客户端需要争…...
17.Golang channel的基本定义及使用
目录 概述实践无缓冲 channel代码结果 缓冲 channel代码结果 channel的关闭特点代码结果range代码结果 select channel代码结果 结束 概述 此篇文章介绍 channel 的用法 无缓冲 channel缓冲 channelchannel的关闭特点range channelselect channel 每一种,配上完整…...
Linux - iptables 防火墙
一. 安全技术和防火墙 1.安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全…...
如何在FBX剔除Lit.shader依赖
1)如何在FBX剔除Lit.shader依赖 2)Unity出AAB包(PlayAssetDelivery)模式下加载资源过慢问题 3)如何在URP中正确打出Shader变体 4)XLua打包Lua文件粒度问题 这是第371篇UWA技术知识分享的推送,精…...
cesium-测量高度垂直距离
cesium做垂直测量 完整代码 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-i…...
Adobe Illustrator CEP插件开发入门指南
引言 Adobe Creative Cloud(创意云)中的Illustrator作为一款全球领先的矢量图形设计软件,为设计师提供了丰富的功能和无限的创作可能性。为了进一步增强其功能并满足个性化工作流程需求,Adobe引入了Common Extensibility Platform…...
【Spring】自定义注解 + AOP 记录用户的使用日志
目录 编辑 自定义注解 AOP 记录用户的使用日志 使用背景 落地实践 一:自定义注解 二:切面配置 三:Api层使用 使用效果 自定义注解 AOP 记录用户的使用日志 使用背景 (1)在学校项目中,安防平台…...
linux互斥锁:递归锁,非递归锁用法详解
在实际的项目中经常涉及到共享资源,共享资源被多个线程访问会出现竞争现象;为了解决竞争和保护共享资源常用的机制之一就是互斥锁! 互斥锁又分为递归锁和非递归锁,互斥锁默认是非递归锁,也是我们常用的上锁方式。那么什么是递归锁和非递归锁呢? 非递归锁(Non-recursive …...
MacOS安装dmg提示已文件已损坏的解决方法
MacOS安装dmg提示已文件已损坏的解决方法 导致原因是应用没有上传到苹果的appstroe,系统限制了安装,破碎提示是苹果的误导小手段 方法 一 App 在macOS Catalina(比较新的系统,例如m1,m2也适用)下提示已损坏…...
前端输入框简单实现检测@成员输入
大体逻辑是 给input框添加一个input监听,并判断输入是否为获取当前光标的位置,你输入的肯定在光标之前,且肯定是最后一个input输入的内容换行可以被认为空格,需要进行全局替换判断成功的逻辑分为两部分,前方一般来说是…...
通过与chatGPT交流实现零样本事件抽取
1、写作动机: 近来的大规模语言模型(例如Chat GPT)在零样本设置下取得了很好的表现,这启发作者探索基于提示的方法来解决零样本IE任务。 2、主要贡献: 提出了基于chatgpt的多阶段的信息抽取方法:在第一阶…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
