重生之我在21世纪学C++—关系、条件、逻辑操作符

news2025/4/3 13:24:40

一、关系操作符

1、关系操作符介绍

用于比较的表达式,称为 “关系表达式”(relational expression),里面使用的运算符称为 “关系运算符”(relational operator),主要有下面 6 个:

运算符描述
>大于运算符,用于比较两个数值,如果左侧数值大于右侧数值,则返回 1 (真),否则返回 0 (假)
<小于运算符,用于比较两个数值,如果左侧数值小于右侧数值,则返回 1 (真),否则返回 0 (假)
>=大于等于运算符,用于比较两个数值,如果左侧数值大于或等于右侧数值,则返回 1 (真),否则返回 0 (假)
<=小于等于运算符,用于比较两个数值,如果左侧数值小于或等于右侧数值,则返回 1 (真),否则返回 0 (假)
==相等运算符,用于比较两个值是否相等,如果相等,则返回 1 (真),否则返回 0 (假)
!=

不等于运算符,用于比较两个值是否不相等,如果不相等,则返回 1 (真),否则返回 0 (假)

关系表达式通常返回 01,表示真假 (0 表示所有非零值表示)。比如,表达式 20 > 12 返回 1,12 > 20 返回 0。
关系表达式常用于 if 或 while 结构。

注意:相等运算符 == 与赋值运算符 = 是两个完全不一样的运算符,不要混淆。有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。

if (x = 3) {}

这里是赋值语句(把3赋值给x),不是判断x和3是否相等,x = 3 执行完成会返回 3 ,属于非零值,为真,所以始终会走到if条件去,执行if条件下的所有语句。(编译器是不会报错的)

建议:一个常量和一个变量比较相等的时候,建议将常量放在 == 的左边,因为即使写出 3 = x 编译器会报错(变量无法赋值给一个常量),只有写成 3 == x 才能正常执行。 

2、关系操作符的连用

多个关系运算符不宜连用。

举例:

i < j < k

上面示例中,连续使用了两个小于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左往右计算的,所以实际执行的是下面的表达式:

( i < j ) < k

上面式子中,从左往右会先执行 i 和 j 的大小比较,i < j 返回 1,i > j 返回 0 ,所以最终是 1 或 0 与变量 k 进行比较。

想要达到保证变量 j 的值在 i 和 k 之间,需要写出下面这样:

i < j && j < k

3、浮点数比较相等

在比较浮点数时,由于浮点数在计算机中是以有限精度表示的,也就是说有些浮点数在内存中其实是无法精确保存的,这就可能导致浮点数比较中的一些精度误差问题。
如果直接使用 == 来比较两个浮点数,很可能会由于这些微小的误差导致不准确的结果。

我们拿实例说话:

大家是不是感觉很神奇?从数学角度考虑a + b 是否等于 c ,很显然是成立的,但是由于计算机无法精确存储 a ,b, c,这就会导致判断相等上出现问题。

那浮点数怎么比较呢?

答:要允许有误差存在

常见的写法如下:

二、条件操作符

1、条件操作符介绍

条件操作符也叫三目操作符,需要接收三个操作数的,形式如下:

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果 exp1 为真,exp2 计算,exp2 计算的结果就是整个表达式的结果;如果 exp1 为假,exp3 计算,exp3 计算的结果就是整个表达式的结果。
这种三目操作符和 if 语句的逻辑非常相似,就是根据 exp1 的结果来选择执行 exp2,或者 exp3。一般使用在简单的逻辑判断中。

举例:

在这道题目中,输入3个整数,要求输出最大的整数。首先用第一个条件操作符找出 b 和 c 中的较大值放到变量 max 中,再用第二个条件操作符找出 a 和 max 中的较大值再次赋值给 max ,最后输出 max 即可达到想要的效果。

三、逻辑操作符

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符:

符号名称功能
!逻辑取反运算符改变单个表达式的真假状态。如果表达式为真,则结果为假;如果表达式为假,则结果为真。
&&逻辑与运算符两侧的表达式都需要为真时,结果才为真。如果任何一个表达式为假,结果就为假。
||逻辑或运算符两侧的表达式中,只要有一个为真,结果就为真。只有当两个表达式都为假时,结果才为假。

1、逻辑取反运算符

a!a
非 00
01

举例:

在上述示例中 flag 初始化为 0 ,为假,但是 !flag 实现了取反,!flag 整体为真,执行i f 条件下的全部语句。

2、逻辑与运算符

aba&&b
非 0非 01
非 000
0非 00
000

&& 就是与运算符,是并且的意思,&& 是一个双目操作符,使用的方式是 a&&b,&& 两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。

举例,判断春季:

3、逻辑或运算符

|| 是或运算符,也就是或者的意思,|| 是一个双目操作符,使用的方式是 a || b,|| 两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

举例,判断冬季:

4、短路

逻辑运算符有一个特点,它总是先对左侧的表达式求值再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式就能确定整个表达式的结果,就不再对右边的表达式求值,这种情况称为 “短路”。
如前面的代码:

if(month >= 3 && month <=5)

表达式中 && 的左操作数是 month >= 3,右操作数是 month <= 5,当左操作数 month>= 3 的结果是 0 的时候,即使不判断 month <= 5,整个表达式的结果也是 0(不是春季)。
所以,对于 && 操作符来说,左边操作数的结果是 0 的时候,右边操作数就不再执行
对于 || 操作符来说,以前面的代码为例:

if(month == 12 || month == 1 || month == 2)

如果 month == 12,则不用再判断 month 是否等于 1 或者 2,整个表达式的结果是 1(是冬季)。
所以,|| 操作符的左操作数的结果不为 0 时,就无需执行右操作数
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作:SolidWorks从3D文件导出2D的DWG或DXF类型文件方法

工作&#xff1a;SolidWorks从3D文件导出2D的DWG或DXF类型文件方法 SolidWorks从3D文件导出2D的DWG或2D DXF类型文件方法&#xff08;一&#xff09;打开3D文件&#xff08;二&#xff09;从装配体到工程图&#xff08;三&#xff09;拖出想要的角度的图型&#xff08;四&#…

Spring Cloud Alibaba:一站式微服务解决方案

一、简介 Spring Cloud Alibaba&#xff08;简称SCA&#xff09; 是一个基于 Spring Cloud 构建的开源微服务框架&#xff0c;专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。它集成了阿里巴巴开源的各种分布式服务技术&#xff0c;提供了一系列…

基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0095 1. 主要功能&#xff1a; 基于51单片机的病床呼叫系统proteus仿…

windows10下,nvidia控制面板升级驱动后osgearth三维程序无法运行

osg系列文章目录 文章目录 osg系列文章目录一.前言二.解决办法 一.前言 windows10下&#xff0c;nvidia控制面板升级驱动后osgearth三维程序无法运行&#xff0c;情景如下: 笔者使用的是天选1笔记本&#xff0c;硬件配置如下 osgearth和osg对应的版本是&#xff1a; Osg3.4.1…

【计算机学习笔记】GB2312、GBK、Unicode等字符编码的理解

之前编写win32程序时没怎么关注过宽字符到底是个啥东西&#xff0c;最近在编写网络框架又遇到字符相关的问题&#xff0c;所以写一篇文章记录一下&#xff08;有些部分属于个人理解&#xff0c;如果有错误欢迎指出&#xff09; 目录 几个常见的编码方式Unicode和UTF-8、UTF-16、…

七种msvcp140.dll丢失的解决方法及了解msvcp140.dll丢失的原因

在Windows操作系统中&#xff0c;msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分。这个动态链接库文件对于许多应用程序的正常运行至关重要&#xff0c;因为它包含了C程序所需的标准库函数。当用户遇到“msvcp140.dll丢失”或类似的错误信息时&#x…

QT4和 QT5 槽函数连接的区别

正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…

LeetCode - #152 乘积最大子数组(Top 100)

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 本题为 LeetCode 前 100 高频题 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 …

新手前端开发入职公司全流程

作为一名前端开发新手&#xff0c;进入一家公司开启职业生涯是既兴奋又充满挑战的旅程。今天就来和大家分享一下这个过程中的各个环节。 一、入职准备 在收到心仪公司的offer后&#xff0c;可别只顾着高兴啦。首先要准备好入职资料&#xff0c;像身份证、学历证明这些是必不可…

【深入探索 C++ STL 容器 list】 —— 编程世界的万能胶,数据结构中的百变精灵

STL系列学习参考&#xff1a; STL 数据结构与算法__Zwy的博客-CSDN博客https://blog.csdn.net/bite_zwy/category_12852141.html 学习C STL的三个境界&#xff0c;会用&#xff0c;明理&#xff0c;能扩展&#xff0c;STL中的所有容器都遵循这个规律&#xff0c;下面我们就按…

【数电】常见时序逻辑电路设计和分析

本文目的&#xff1a;一是对真题常考题型总结&#xff0c;二是对常见时序电路设计方法进行归纳&#xff0c;给后面看这个文档的人留有一点有价值的东西。 1.不同模计数器设计 2.序列信号产生和检测电路 2.1序列信号产生电路 2.1.1设计思路 主要设计思路有三种 1&#xff09…

MCU、ARM体系结构,单片机基础,单片机操作

计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备&#xff1a;将其他信号转换为计算机可以识别的信号&#xff08;电信号&#xff09;。输出设备&#xff1a;将电信号&#xff08;&#xff10;、&#xff11;&#xff09;转为人或其他设备能理解的…

数字图像处理考研考点(持续更新)

一、数字图像基本概念 1、人眼视觉特性 &#xff08;1&#xff09;眼睛上有两类光感受器&#xff1a;锥状体和杆状体 锥状体(锥细胞)&#xff1a;约 700 万个&#xff0c;对颜色高度敏感&#xff0c;每个锥状体都连接到神经末梢&#xff0c;人可以充分地分辨图像细节。锥细胞…

Lumos学习王佩丰Excel第二十讲:图表基础

Excel图表就像是把一堆复杂的数字变成了一幅幅直观的图画&#xff0c;让我们能够更快地理解数据之间的关系和趋势&#xff0c;使工作表更易于读懂和交流。学好这几节课&#xff0c;不仅可以辅助工作&#xff0c;还可以装X哈哈哈~~~ 一、认识图表中的元素&#xff08;七块积木&…

VTK知识学习(20)- 数据的存储与表达

1、数据的存储 1)、vtkDataArray VTK中的内存分配采用连续内存&#xff0c;可以快速地创建、删除和遍历&#xff0c;称之为数据数组(DataArray)&#xff0c;用类 vtkDataArray 实现。数组数据的访问是基于索引的&#xff0c;从零开始计数。 以 vtkFloatArray 类来说明如何在 …

如何在UI自动化测试中创建稳定的定位器?

如何在UI自动化测试中创建稳定的定位器&#xff1f; 前言1. 避免使用绝对路径2. 避免在定位器中使用索引3. 避免多个类名的定位器4. 避免动态和自动生成的ID5. 确保定位器唯一6. 处理隐藏元素的策略7. 谨慎使用基于文本的定位器8. 使用AI创建稳定的定位器 总结 前言 在自动化测…

SparkSQL 读写数据攻略:从基础到实战

目录 一、输入Source 1&#xff09;代码演示最普通的文件读取方式&#xff1a; 2&#xff09; 通过jdbc读取数据库数据 3) 读取table中的数据【hive】 二、输出Sink 实战一&#xff1a;保存普通格式 实战二&#xff1a;保存到数据库中 实战三&#xff1a;将结果保存在h…

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。 首先来了解几个概念: CPython 是 Python 编…

Windows环境中Python脚本开机自启动及其监控自启动

1 开机自启动 Windows 10/Windows Server 201X具有一个名为“启动”的已知文件夹&#xff0c;系统每次启动开始自动运行应用程序、快捷方式和脚本时都会检查该文件夹&#xff0c;而无需额外配置。 要在Windows启动时运行脚本&#xff0c;先使用WindowsR快捷键打开“运行”对话…

Mysql索引原理及优化——岁月云实战笔记

根据Mysql索引原理及优化这个博主的视频学习&#xff0c;对现在的岁月云项目中mysql进行优化&#xff0c;我要向这个博主致敬&#xff0c;之前应用居多&#xff0c;理论所知甚少&#xff0c;于是将学习到东西&#xff0c;应用下来&#xff0c;看看是否有好的改观。 1 索引原理…