当前位置: 首页 > news >正文

捋一捋C++中的逻辑运算(一)——表达式逻辑运算

注意,今天要谈的逻辑运算是C++语言编程中的“与或非”逻辑运算,不是数学集合中的“交并补”逻辑运算。而编程中的逻辑运算又包括表达式逻辑运算和位逻辑运算,本章介绍表达式逻辑运算,下一章介绍位逻辑运算。

目录

一、几个基本的概念

二、逻辑运算

1、逻辑表达式的计算顺序

(1)运算符优先级

(2)逻辑表达式的运算顺序

①人工分析

②程序验证

2、复合逻辑运算与数学区间的关系

3、表达式逻辑运算的应用

(1)和if……else搭配

(2)和条件表达式搭配


一、几个基本的概念

要想搞清楚表达式逻辑运算,首先要了解关系运算符、关系表达式、逻辑运算符、逻辑表达式4个概念。

1、关系运算符

关系运算符,有6种关系,分别为小于(<)、大于(>)、等于(==)、小于等于(<=)、大于等于(>=)、不等于(!=)

2、关系表达式

关系表达式是指计算机程序中用关系运算符将两个表达式连接起来的式子。

关系表达式的值是逻辑值“真”或“假”。但是C++语言没有逻辑型变量和逻辑型常量,也没有专门的逻辑值,故以“非0”代表“真”,以“0”代表“假”。在关系表达式求解时,以“1”代表“真”,以“0”代表假。当关系表达式成立时,表达式的值为1,否则表达式的值为0。

关系表达式有双目和单目两种。

(1)双目

就是关系表达式中有两个表达式,比如,a>b,c<10,a==4,a<=8等。

#include <iostream>
using namespace std;
int main() {int a=3,b=2;bool c,d,e;c=a>b;d=a<b;e=(a==b);cout << "a大于b的逻辑值:"<< c << endl;cout << "a小于b的逻辑值:"<< d << endl;cout << "a等于b的逻辑值:"<< e << endl;return 0;
}

运行结果为:

a大于b的逻辑值:1
a小于b的逻辑值:0
a等于b的逻辑值:0

(2)单目

就是关系表达式只有一个表达式,a+b,a,b*c等等。那么有人问了,关系表达式就是要有比较,只有一个表达式,怎么比较,和谁比较?

单目关系表达式,实际是这个表达式和“0”进行比较,如果这个表达式的结果是0,就是“假”,其值为0,如果这个表达式的结果非0,就是“真”,其值为1。特别要注意,代表真的是“非0”,而不是“1”,也就是任何一个“非0”的数,都逻辑值都是“真”,包括小数和负数。

#include <iostream>
using namespace std;
int main() {float a=3,b=0.3,c=-5,d=0;bool b1,b2,b3,b4;b1=a;b2=b;b3=c;b4=d;cout << "3的逻辑值:"<<b1<< endl;cout << "0.3的逻辑值:"<< b2<< endl;cout << "-5的逻辑值:"<< b3<< endl;cout << "0的逻辑值:"<< b4<< endl;return 0;
}

运行结果:

3的逻辑值:1
0.3的逻辑值:1
-5的逻辑值:1
0的逻辑值:0

3、逻辑运算符

C++中表达式逻辑运算有“逻辑与”、“逻辑或”和“逻辑非”3种,对应的逻辑运算符为“&&”,“||”,“!”。“逻辑与”和“逻辑或”是双目运算,是两个关系表达式进行逻辑运算,“逻辑非”是单目运算,是一个关系表达式进行取反运算。关系表达式1用“A”代表,关系表达式2用“B”代表,逻辑运算的规则如表1所示。

表1 三种逻辑运算规则
逻辑运算逻辑运算结果为“真”逻辑运算结果为“假”
A && BA、B都为“真”A、B不都为“真”
A || BA、B不都为“假”A、B都为“假”
!AA为“假”A为“真”

4、逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来的有意义的式子称为逻辑表达式。逻辑表达式的值是一个逻辑值,即“true”或“false”。C语言编译系统在给出逻辑运算结果时,以数字1表示“真”,以数字0表示“假”,但在判断一个量是否为“真”时,以0表示“假”,以非0表示“真”。

注意,逻辑表达式中可以由多个逻辑运算符、多种运算符复合而成。如“A && B || C”,“A && !B”。

二、逻辑运算

那么搞清楚以上4个概念后,也就能搞清楚什么是逻辑运算了,逻辑运算就是求逻辑表达式的逻辑值。那么在进行逻辑运算时需要注意以下几点:

1、逻辑表达式的计算顺序

因为逻辑表达式由多个关系表达式、多个逻辑运算符复合而成,那么就要搞清楚计算的顺序。

(1)运算符优先级

常见的运算符包括算数运算符(+,-,*,/等),关系运算符(>,<,>=,<=,==,!=),逻辑运算符(&&,||,!)和赋值运算符(=)。那么这四种运算符的优先级为:

括号逻辑非 >算数运算符关系运算符> 逻辑与> 逻辑或 > 赋值运算符

尤其要注意的是:逻辑非的优先级比算数运算符还要高

(2)逻辑表达式的运算顺序

逻辑表达式的运算规则为:先计算优先级高的运算符,同一优先级中的运算符按照从左到右依次计算。

例:假设a=3,b=0.3,c=2,d=0,那么逻辑表达式“ !(a<b+c)||b<c&&d>0”的结果是多少?

先来编制程序如下,声明一个bool型变量b1,并将!(a<b+c)||b<c&&d>0的值赋值给b1,这样表达式中就包含了上述运算符的所有情况。

①人工分析

先来分析一下“b1=  !(a<b+c)||b<c&&d>0”的结果:

第一步:括号优先级最高,所以首先要计算括号中a<b+c的值,而a<b+c中有算数运算符和关系运算符,算数运算符优先级更高,先计算b+c,结果为2.3,逻辑表达式变为以下情况:

b1=  !(a<2.3)||b<c&&d>0

第二步:括号中有两步计算,只完成一步,括号还没去去掉,仍然优先级最高,下一步要计算关系表达式a<2.3的值,a=3,所以a<2.3的逻辑值为假,也就是0,逻辑表达式变为以下情况:

b1=  !0||b<c&&d>0

第三步:表达式中括号已经去掉,优先级最高的是“逻辑非”,!0=1,所以表达式变为:

b1=  1||b<c&&d>0

第四步:表达式中只有关系运算符和逻辑运算符,优先计算关系运算符b<c和d>0,逻辑值分别为1和0,表达式变为:

b1=  1||1&&0

第五步:表达式中只有逻辑运算符,逻辑与高于逻辑或,先计算1&&0,结果为0,表达式变为:

b1=  1||0

第六步:表达式中只有一个逻辑运算符,计算1||0,结果为1,表达式变为:

b1=  1

第七步:逻辑表达式已经计算出结果,最后只剩赋值运算符,把1赋值给变量b1,运算结束。

所以最终打印b1的结果应该为1。

整理以上计算过程如下:

假设a=3,b=0.3,c=2,d=0,那么

b1  =  !(a<b+c)||b<c&&d>0

      =  !(a<2.3)||b<c&&d>0

      =  !0||b<c&&d>0

      =  1||b<c&&d>0

      =  1||1&&0

      =  1||0

      =  1

②程序验证

下边编制程序验证一下,代码如下:

#include <iostream>
using namespace std;
int main() {    float a=3,b=0.3,c=2,d=0;bool b1;b1=  !(a<b+c)||b<c&&d>0;cout << "逻辑值:"<<b1<< endl;   return 0;
}

运行结果为:

逻辑值:1

与分析的结果一致,验证分析方法无误。

2、复合逻辑运算与数学区间的关系

a>3 && a<5,如果逻辑值为真时,表示a\in\left ( 3,5 \right );逻辑值为假时,表示a\notin \left ( 3,5 \right )

a>3 || a<0,如果逻辑值为真时,表示a\in\left ( -\propto ,0 \right )\bigcup \left ( 3,\propto \right );逻辑值为假时,表示a\in\left [ 0,3 \right ]

3、表达式逻辑运算的应用

在编程中,逻辑运算一般都和选择结构搭配使用,选择结构有单分支和双分支两种,如图1所示,图中的条件表达式就是逻辑表达式。

图1 选择结构

(1)和if……else搭配

最常用的就是和if……else搭配,格式如下:

if(逻辑表达式)
{执行代码1;
}
else
{执行代码2;
}

if后边的逻辑表达式计算的结果为真时,执行代码1,计算结果为假时,执行代码2。

(2)和条件表达式搭配

C++中的条件表达式,也称为问号表达式,是一种三目运算符,是一种简洁的条件表达式,它可以根据条件选择不同的值。这种表达式的通用形式为:“expression1?expression2:expression3”。其中,expression1 是条件表达式,expression2和expression3分别是当条件为真和假时返回的表达式。如果expression1的值为非零(真),则整个条件表达式的值与expression2的值相同;如果 expression1的值为零(假),则整个条件表达式的值与 expression3的值相同。

典型应用例子:比较两个值的大小,返回最大值或者最小值。

#include <iostream>
using namespace std;
int main() {    int a=55,b=13;int max,min;max=a>b?a:b;min=a>b?b:a;cout << "最大值:"<<max<< endl;cout << "最小值:"<<min<< endl; return 0;
}

运行结果:

最大值:55
最小值:13

(全文结束)

相关文章:

捋一捋C++中的逻辑运算(一)——表达式逻辑运算

注意&#xff0c;今天要谈的逻辑运算是C语言编程中的“与或非”逻辑运算&#xff0c;不是数学集合中的“交并补”逻辑运算。而编程中的逻辑运算又包括表达式逻辑运算和位逻辑运算&#xff0c;本章介绍表达式逻辑运算&#xff0c;下一章介绍位逻辑运算。 目录 一、几个基本的概…...

qcom 平台系统签名流程

security boot 平台的东东&#xff0c;oem 可定制的功能有限&#xff0c;只能参考平台文档&#xff0c;可以在高通的网站上搜索&#xff1a;Secure Boot Enablement&#xff0c;然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可 开机校验流…...

从零开始实现自己的串口调试助手(5) -实现HEX显示/发送/接收

实现HEX显示: HEX 显示 -- 其实就是 十六进制显示 --> a - 97(10) --> 61(16) 添加槽函数(bool): 实现槽函数: 注意: 注意QString 没有处理HEX显示的相关API 需要使用 toUtf-8 来 转换位QByteArry 类型&#xff0c; 利用其中的API 来处理HEX格式(toHex fromHex) vo…...

【计算机毕设】基于SpringBoot的民宿在线预定平台设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本研究旨在设计并实现一个基于SpringBoot的民宿在线预定平台。通过信息化手段提高民宿预定效率&#xff0c;方便用户查询房源、预定房间、在线支付和…...

大数据—数据分析概论

一、什么是数据分析 数据分析是指使用统计、数学、计算机科学和其他技术手段对数据进行清洗、转换、建模和解释的过程&#xff0c;以提取有用的信息、发现规律、支持决策和解决问题。数据分析可以应用于各种领域&#xff0c;包括商业、医学、工程、社会科学等。 二、数据分析步…...

centos7下卸载MySQL,Oracle数据库

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 操作系统版本为CentOS 7 使⽤ MySQ…...

Spring解决循环依赖

Spring框架为了解决循环依赖问题&#xff0c;设计了一套三级缓存机制&#xff1a; 一级缓存singletonObjects:这个是最常规的缓存&#xff0c;用于存放完成初始化好的bean&#xff0c;如果某个bean已经在这个缓存了直接返回。二级缓存earlySigletonObjects:这个用于存放早期暴…...

RUST运算符重载

在 Rust 中&#xff0c;可以使用特征&#xff08;traits&#xff09;来实现运算符重载。运算符重载是通过实现相应的运算符特征&#xff08;如 Add、Sub、Mul 等&#xff09;来完成的。这些特征定义在 std::ops 模块中。下面是一个简单的示例&#xff0c;展示如何为一个自定义结…...

描述一下 Array.forEach() 循环和 Array.map() 方法之间的主要区别

Array.forEach() 和 Array.map() 都是 JavaScript 数组中常用的方法,但它们之间有一些重要的区别: 返回值:forEach()&#xff1a;没有返回值,它只是对数组中的每个元素执行提供的函数。map()&#xff1a;返回一个新的数组,其元素是通过对原数组的每个元素执行提供的函数后的结…...

在GEE中显示矢量或栅格数据的边界(包含样式设计)

需要保证最后显示的数据是一个 FeatureCollection 对象。 如果数据是一个 Geometry 或 Image&#xff0c;我们也可以使用 style 方法来设置样式并将其添加到地图上。以下是针对不同类型对象的处理方式&#xff1a; 1 Geometry对象 如果 table 是一个 Geometry 对象&#xff…...

django使用fetch上传文件

在上一篇文章中&#xff0c;我包装了fetch方法&#xff0c;使其携带cookie。但是之前fetch传递的是json数据&#xff0c;现在有了一个上传文件的需求&#xff0c;因此需要进行修改&#xff1a; const sendRequest (url, method, data) > {const csrftoken Cookies.get(cs…...

linux安装docker步骤

步骤1 脚本自动安装 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh 步骤2 启动Docker服务: sudo systemctl start docker 步骤3 验证Docker是否正确安装并运行一个容器: sudo docker run hello-world 安装正确&#xff0c;则可拉取镜像&am…...

Unity DOTS技术(一)简介

文章目录 一.概述二.将会介绍的内容三.DOTS技术与传统方式的不同传统问题DOTS技术 四.插件安装 一.概述 传统的游戏开发中,如果有成千上万的物体在场景中运动,那么你一定会认为是疯了.但有了Dost技术这一些都将变成可能.如图场景中有10000个物体在同时运动,帧率即能保持在60Fp…...

深度解读ChatGPT基本原理

一、基本原理 ChatGPT是一个基于深度学习的自然语言生成模型&#xff0c;使用了类似于GPT&#xff08;Generative Pre-trained Transformer&#xff09;的架构。GPT是由OpenAI开发的一种语言模型&#xff0c;能够生成与输入文本相关的连续性文本。 ChatGPT的基本原理是先使用…...

python实现——分类类型数据挖掘任务(图形识别分类任务)

分类类型数据挖掘任务 基于卷积神经网络&#xff08;CNN&#xff09;的岩石图像分类。有一岩石图片数据集&#xff0c;共300张岩石图片&#xff0c;图片尺寸224x224。岩石种类有砾岩&#xff08;Conglomerate&#xff09;、安山岩&#xff08;Andesite&#xff09;、花岗岩&am…...

【安卓跨进程通信IPC】-- Binder

目录 BinderBinder是什么&#xff1f;进程空间分配进程隔离Binder跨进程通信机制模型优点AIDL常见面试题 Binder 夯实基础之超详解Android Binder的工作方式与原理以及aidl示例代码 比较详细的介绍&#xff1a;Android跨进程通信&#xff1a;图文详解 Binder机制 原理 操作系统…...

大数据之Schedule调度错误(一)

当我们在利用ooize发起整个任务的调度过程中,如果多个调度任务同时运行并且多个调度任务操作了相同的表,那么就会出现如下的错误关系: Invalid path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/admin/xxx: No files matching path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/ad…...

DiffIR论文阅读笔记

ICCV2023的一篇用diffusion模型做Image Restoration的论文&#xff0c;一作是清华的教授&#xff0c;还在NIPS2023上一作发表了Hierarchical Integration Diffusion Model for Realistic Image Deblurring&#xff0c;作者里甚至有Luc Van Gool大佬。模型分三个部分&#xff0c…...

prometheus+alertmanager+webhook钉钉机器人告警

版本&#xff1a;centos7.9 python3.9.5 alertmanager0.25.0 prometheus2.46.0 安装alertmanager prometheus 配置webhook # 解压&#xff1a; tar -xvf alertmanager-0.25.0.linux-amd64.tar.gz tar -xvf prometheus-2.46.0.linux-amd64.tar.gz mv alertmanager-0.25.0.linu…...

ctfshow 年CTF web

除夕 Notice: Undefined index: year in /var/www/html/index.php on line 16 <?phpinclude "flag.php";$year $_GET[year];if($year2022 && $year1!2023){echo $flag; }else{highlight_file(__FILE__); } 弱比较绕过很简单&#xff0c;连函数都没有直…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...