指挥棒:C++ 与运算符
文章目录
- 参考
- 描述
- 算术运算符
- 除法运算
- 取模运算
- 复合赋值运算符
- 自增运算符
- 自减运算符
- 比较运算符
- 逻辑运算符
- 概念
- 短路
- 为什么需要短路机制?
参考
| 项目 | 描述 |
|---|---|
| 微软 | C++ 语言文档 |
| 搜索引擎 | Bing、Google |
| AI 大模型 | 文心一言、通义千问、讯飞星火认知大模型、ChatGPT |
| C++ Primer Plus (第六版)中文版 | 史蒂芬·普拉达 / 张海龙,袁国忠 译 |
| 精通C++(第九版) | ISBN:9787302503163 |
| 黑马程序员 | C++ |
| CPlusPlus | Reference |
描述
| 项目 | 描述 |
|---|---|
| 操作系统 | Windows 10 专业版 |
| 编辑器 | VSCode |
| 编译器 | g++.exe (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 13.1.0 |
算术运算符
C++ 作为编程语言提供了各种运算符,这其中包含了算术运算符。算术运算符在编程语言中 用于执行各种数学运算操作。在 C++ 中有如下常用的算术运算符:
| 项目 | 描述 |
|---|---|
+ | 正号、加法运算符 |
- | 负号、减法运算符 |
* | 乘法运算符 |
/ | 除法运算符 |
% | 取模(取余)运算符 |
++ | 自增运算符 |
-\- | 自减运算符 |
除法运算
在 C++ 中使用除法运算符进行除法运算时,除法运算符的行为将因操作数(参与运算的数据)的不同而不同,具体如下:
- 若两个操作数
均为整数,则除法运算的结果将为整数。 - 若两个操作数中
存在浮点数,则除法运算的结果将为浮点数。
举个栗子
#include <iostream>
using namespace std;int main() {cout << 5 / 3 << endl;cout << 5.0 / 3 << endl;cout << 5.0 / 3.0 << endl;system("pause");return 0;
}
执行结果
1
1.66667
1.66667
请按任意键继续. . .
注:
-
除法操作符作用的两个操作数若为整数时,除法运算的结果将为整数。该
整数并不是由实际计算结果四舍五入后得来的,而是直接去除小数点及小数部分后所剩余的部分 。 -
在表达式中,除数不能为零。否则,C++ 将为此抛出异常。
取模运算
取模运算与除法运算的区别在于,除法运算的结果值为 两数相除的结果,而取模运算的结果值为 两数相除所得到的余数。
举个栗子
#include <iostream>
using namespace std;int main() {cout << 5 % 3 << endl;cout << 0 % 9 << endl;cout << 36 % 6 << endl;system("pause");return 0;
}
执行结果
2
0
0
请按任意键继续. . .
注:
-
取模运算符的操作数不可为浮点数,仅能为整数。否则,C++ 将为此抛出异常。 -
取模运算符的操作数中若存在负数,则结果值的正负性满足如下规则:
就A % B而言,取模运算的结果值的正负性与操作数A相同。
举个栗子
#include <iostream>
using namespace std;int main() {cout << -5 % 3 << endl;cout << 8 % -20 << endl;cout << -3 % -3 << endl;cout << -2 % -3 << endl;system("pause");return 0;
}
执行结果
对于 C++ 来说,-0 与 0 是相同的。故 -3 % -3 的输出结果为 0。
-2
8
0
-2
请按任意键继续. . .
复合赋值运算符
在 C++ 中,+=、-= 等运算符被称为复合赋值运算符(Compound Assignment Operators)。复合赋值运算符 结合了算术运算符与赋值运算符的功能,可以用来简化对变量值的修改操作。
C++ 所支持的常用复合赋值运算符
| 赋值运算符 | 功能 | 示例 | 等效于 |
|---|---|---|---|
+= | 加法赋值运算符,将右侧的值加到左侧的变量上 | a += b; | a = a + b; |
-= | 减法赋值运算符,从左侧的变量中减去右侧的值 | a -= b; | a = a - b; |
*= | 乘法赋值运算符,将左侧的变量与右侧的值相乘 | a *= b; | a = a * b; |
/= | 除法赋值运算符,将左侧的变量除以右侧的值 | a /= b; | a = a / b; |
%= | 取模赋值运算符,将左侧的变量取模右侧的值 | a %= b; | a = a % b; |
举个栗子
#include <iostream>
using namespace std;int main() {int a = 97, b = 98, c = 99;a += 9;b %= 7;c /= 33;cout << "97 + 9 = " << a << endl;cout << "98 % 7 = " << b << endl;cout << "99 / 33 = " << c << endl;system("pause");return 0;
}
执行效果
97 + 9 = 106
98 % 7 = 0
99 / 33 = 3
请按任意键继续. . .
自增运算符
使用自增运算符可以将类似 a = a + 1 的语句简化为 a++ 或 ++a。其中,a++ 中的 ++ 被称为后置自增运算符;++a 中的 ++ 被称为前置自增运算符。
前置自增与后置自增的区别在于,两者所作用的操作数自增的时机不同。前置自增运算过程中操作数的自增时机 在包含自增语句的表达式执行完毕前完成自增,而后置自增运算过程总操作数的自增时机则 在包含自增语句的表达式执行完毕后完成自增。对此,请参考如下示例:
举个栗子
#include <iostream>
using namespace std;int main() {int num = 3;// 3 * 6 + 3 * 6 = 36cout << 3 * 6 + num++ * 6 << endl;num = 3;// 3 * 6 + 4 * 6 = 42cout << 3 * 6 + ++num * 6 << endl;system("pause");return 0;
}
执行结果
36
42
请按任意键继续. . .
自减运算符
自减运算符与自增运算符的类似,只是自增运算符最终将实现操作数的 自增,而自减运算符最终将实现操作数的 自减。
比较运算符
比较运算符作用于两个操作数,运算结果为布尔值。C++ 支持如下比较运算符:
| 项目 | 描述 |
|---|---|
| == | 判断两个操作数是否相等,若两者相等则运算结果为 true,否则为 false 。 |
| != | 判断两个操作数是否不相等,若两者不相等则运算结果为 true,否则为 false 。 |
| > | 判断左操作数是否大于右操作数,若是则运算结果为 true,否则为 false。 |
| < | 判断左操作数是否小于右操作数,若是则运算结果为 true,否则为 false。 |
| >= | 判断左操作数是否大于或等于右操作数,若是则运算结果为 true,否则为 false。 |
| <= | 判断左操作数是否小于或等于右操作数,若是则运算结果为 true,否则为 false。 |
举个栗子
#include <iostream>
using namespace std;int main() {cout << (3 > 6) << endl;cout << (6 >= 6) << endl;cout << ('3' == 3) << endl;system("pause");
}
执行结果
0
1
0
请按任意键继续. . .
逻辑运算符
概念
C++ 中的逻辑运算符是用于执行逻辑运算的特殊运算符,逻辑运算符操作 布尔值(true 或 false) 或 布尔表达式(能够产生布尔值的表达式,含有逻辑运算符的表达式也是布尔表达式)以产生布尔结果。逻辑运算符主要用于 控制流程 和 条件测试。
C++ 中存在三种逻辑运算符,具体如下:
| 逻辑运算符 | 描述 | 称呼 | 别称 |
|---|---|---|---|
| ! | 操作数将被隐式转换为 Bool 类型。 如果转换结果为 false,则运算结果为 true;反之,结果为 false。 | 逻辑非 | |
| && | 操作数将被隐式转换为 Bool 类型。如果两个操作数的转换结果均为 true,则运算结果为 true,否则为 false。 | 逻辑与 | 短路与 |
| || | 操作数将被隐式转换为 Bool 类型。如果两个操作数的转换结果中存在 true,则运算结果为 true,否则为 false。 | 逻辑或 | 短路或 |
举个栗子
由于运算符之间存在 优先级关系,没有考虑到不同运算符之间的优先级可能会导致异常的产生。由于 << 运算符的优先级高于大部分逻辑运算符,故在下述示例中需要 使用括号将逻辑运算表达式括起以提高被包裹表达式的优先级,使得程序能够正常运行。
#include <iostream>
using namespace std;int main() {cout << !true << endl;cout << (true && false) << endl;cout << (true && true) << endl;cout << (666 || 0) << endl;system("pause");return 0;
}
执行结果
0
0
1
1
请按任意键继续. . .
注:
在 C++ 中,所有的非零值转换为布尔值的结果均为 true;零转换为布尔值的结果为 false 。
短路
逻辑与运算符仅当前一个操作数的转换结果为 true 时,才会计算后一个个操作数。
逻辑或运算符仅当前一个操作数的转换结果为 false 时,才会计算后一个操作数。
逻辑与运算符的第前一个操作数的转换结果为 false 以及逻辑或运算符的前一个操作数为 true 时,都将发生 短路,即后一个操作数不会被计算。
举个栗子
#include <iostream>
using namespace std;int main() {int num = 1;cout << (true || num++) << endl;cout << num << endl;cout << (false && num++) << endl;cout << num << endl;system("pause");return 0;
}
执行结果
在上述代码执行过程中,变量 num 被初始化为 1 后保存的值未曾发生过改变。原因是逻辑运算过程中发生了短路,num++ 均未被执行。
1
1
0
1
请按任意键继续. . .
为什么需要短路机制?
短路机制 有助于提高程序的效率,在某些情况下可以防止出现不必要的计算,尤其是当条件表达式包含了复杂的计算或者函数调用时。但要注意,短路机制可能导致部分表达式 永远不被执行,这 可能会脱离程序的设计初衷。因此,在设计逻辑运算的过程中,需要 仔细考虑条件表达式的逻辑和代码执行的顺序,以确保程序按照开发者的意愿运行。
相关文章:
指挥棒:C++ 与运算符
文章目录 参考描述算术运算符除法运算取模运算复合赋值运算符自增运算符自减运算符 比较运算符逻辑运算符概念短路为什么需要短路机制? 参考 项目描述微软C 语言文档搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型、ChatGPTC Primer Plus &…...
HTTPS建立连接的过程
HTTPS 协议是基于 TCP 协议的,因而要先建立 TCP 的连接。在这个例子中,TCP 的连接是在手机上的 App 和负载均衡器 SLB 之间的。 尽管中间要经过很多的路由器和交换机,但是 TCP 的连接是端到端的。TCP 这一层和更上层的 HTTPS 无法看到中间的包…...
Python接口自动化搭建过程,含request请求封装!
开篇碎碎念 接口测试自动化好处 显而易见的好处就是解放双手😀。 可以在短时间内自动执行大量的测试用例通过参数化和数据驱动的方式进行测试数据的变化,提高测试覆盖范围快速反馈测试执行结果和报告支持持续集成和持续交付的流程 使用Requestspytes…...
Vue3 编译原理
文章目录 一、编译流程1. 解读入口文件 packgages/vue/index.ts2. compile函数的运行流程 二、AST 解析器1. ast 的生成2. 创建ast的根节点3. 解析子节点 parseChildren(关键)4. 解析模版元素 Element模版元素解析-举例分析 一、编译流程 1. 解读入口文…...
spring boot整合Minio
MinIO 安装MinIo # 先创建minio 文件存放的位置 mkdir -p /opt/docker/minio/data# 启动并指定端口 docker run \-p 9000:9000 \-p 5001:5001 \--name minio \-v /opt/docker/minio/data:/data \-e "MINIO_ROOT_USERminioadmin" \-e "MINIO_ROOT_PASSWORDmini…...
Hadoop----Azkaban的使用与一些报错问题的解决
1.因为官方只放出源码,并没有放出其tar包,所以需要我们自己编译,通过查阅资料我们可以使用gradlew对其进行编译,还是比较简单,然后将里面需要用到的服务文件夹进行拷贝,完善其文件夹结构,通常会…...
「新房家装经验」客厅电视高度标准尺寸及客厅电视机买多大尺寸合适?
客厅电视悬挂高度标准尺寸是多少? 客厅电视悬挂高度通常在90~120厘米之间,电视挂墙高度也可以根据个人的喜好和实际情况来调整,但通常不宜过高,以坐在沙发上观看时眼睛能够平视到电视中心点或者中心稍微往下一点的位置为适宜。 客…...
ArduPilot开源飞控之AP_Baro_DroneCAN
ArduPilot开源飞控之AP_Baro_DroneCAN 1. 源由2. back-end抽象类3. 方法实现3.1 probe3.2 update3.3 subscribe_msgs3.4 handle_pressure/handle_temperature3.5 CAN port 4. 参考资料 1. 源由 鉴于ArduPilot开源飞控之AP_Baro中涉及Sensor Driver有以下总线类型: …...
Supervised Contrastive Pre-training for Mammographic Triage Screening Model
方法 品红色箭头表示将生成的孪生编码器分别迁移到单视角学习模块和双视角学习模块...
JVM技术文档--JVM优化思路以及问题定位--JVM可调整参数汇总
阿丹: 一个优秀的程序员,是因为在线上的排查以及遇到的线上、生产事故较多所以定位问题以及解决问题会比普通程序员快很多,所以一个优秀的程序员要逐渐形成自己的方法论,来完善和解决问题。 我们是如何发现问题的呢? …...
Oracle10g数据库迁移方案
试验了很多次Oracle数据库迁移才成功,贴出来给大家参考一下,我看到有的地方写迁移之后还需要重新建立temp表空间,这个还没有研究。另外说一点的是两个数据库的版本一定要一致,之前失败过一次,就是因为两个数据库的版本…...
备忘录模式:对象状态的保存与恢复
欢迎来到设计模式系列的第十八篇文章,本篇将介绍备忘录模式。备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在之后恢复该状态。这种模式通常用于需要提供撤销操作的情况。 什么是备忘录模式&#…...
C# InvokeRequired线程安全
C# InvokeRequired线程安全 为了保证新家的线程可能要对主界面的控件元素的属性发生一些改变,此时防止此操作对于主线程的影响,就提出了 InvokeRequired方法,保证主线程的安全,同时新加的线程也可以改变主页面中元素的值。 定义…...
pdf怎么转成jpg图片格式
pdf怎么转成jpg图片格式?对于大家平时在工作或者生活中的图片使用习惯,经常需要将各种格式的文件转换成易于浏览和使用的JPG格式图片以便保存。如今,因为pdf文件具有更强的稳定性和设备兼容性,PDF文件在平时的电脑使用过程中可以说…...
React +ts + babel+webpack
babel babel/preset-typescript 专门处理ts "babel/cli": "^7.17.6", "babel/core": "^7.17.8", "babel/preset-env": "^7.16.11", "babel/preset-react": "^7.16.7", "babel/preset…...
红队专题-REVERSE二进制逆向反编译
红队专题 招募六边形战士队员IDA pro安装python2加入环境变量py2安装pip安装IDA 7.0 proIDAPython: importing "site" failed. 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 IDA pro 安装python2 python-2.7.3.msi 加入环…...
Spring技术原理之Bean生命周期原理解析
Spring技术原理之Bean生命周期原理解析 Spring作为Java领域中的优秀框架,其核心功能之一是依赖注入和生命周期管理。其中,Bean的生命周期管理是Spring框架中一个重要的概念。在本篇文章中,我们将深入探讨Spring技术原理中的Bean生命周期原理…...
Unity实现设计模式——模板方法模式
Unity实现设计模式——模板方法模式 模板模式(Template Pattern), 指在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 简单说, 模板方法模式定义一个操作中的算法的骨架&…...
C++实现高性能内存池(二)
文章目录 一、设计内存池二、实现MemoryPool::construct() 实现MemoryPool::deallocate() 实现MemoryPool::~MemoryPool() 实现MemoryPool::allocate() 实现三、与 std::vector 的性能对比一、设计内存池 在上节中,我们在模板链表栈中使用了默认构造器来管理栈操作中的元素内…...
沪深300期权一个点多少钱?
经中国证监会批准,深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约,下文介绍沪深300期权一个点多少钱?本文来自:期权酱 一、沪深300期权涨…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
