捋一捋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

(全文结束)

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

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

相关文章

视频号上怎么卖货?需要直播,还有粉丝吗?一篇文章带你了解!

大家好&#xff0c;我是电商糖果 关于在视频号上卖货&#xff0c;这是大家最常提起的话题。 大家之所以对视频号卖货感兴趣&#xff0c;主要原因还是抖音卖货火起来了。 而视频号是和抖音处于同一个赛道&#xff0c;这两年也在往电商方向发力。 所以大家对视频号推出电商平…

Window11端口开放防火墙

&#xff08;1&#xff09;打开控制面板&#xff0c;进入【控制面板\系统和安全\Windows Defender 防火墙】 &#xff08;2&#xff09;点击左侧菜单【高级设置】&#xff0c;进入防火墙设置页面 &#xff08;3&#xff09;根据需要选择【入站规则】或者【出站规则】&#xff…

ubtun三节点安装k8s

文章目录 修改Ubuntu配置关闭swap&#xff1a;关闭防火墙 安装docker 修改Ubuntu配置 关闭swap&#xff1a; vim /etc/fstab /dev/disk/by-uuid/a1ce2ecf-91f4-4f53-9984-b2af1e9713c5 /boot ext4 defaults 0 1 /swap.img none swap sw 0 0修改/dev/dis…

nestjs 全栈进阶--拦截器

视频教程 23_nestjs中的拦截器_哔哩哔哩_bilibili 1. rxjs 介绍 RxJS&#xff08;Reactive Extensions for JavaScript&#xff09;是一款专为JavaScript和TypeScript设计的响应式编程库&#xff0c;它遵循ReactiveX规范&#xff0c;提供了一套强大的工具和API&#xff0c;用…

Mac 使用Docker安装Elasticsearch、Kibana

安装ElasticSearch 通过docker安装es docker pull elasticsearch:8.6.2 在本地创建elasticsearch.yml文件 mkdir /Users/ky/Documents/learn/es/elasticsearch.yml 编辑yml文件内容 http: host: 0.0.0.0 xpack.security.enabled: false xpack.security.enrollment.enabled: t…

Scala 练习一 将Mysql表数据导入HBase

Scala 练习一 将Mysql表数据导入HBase 续第一篇&#xff1a;Java代码将Mysql表数据导入HBase表 源码仓库地址&#xff1a;https://gitee.com/leaf-domain/data-to-hbase 一、整体介绍 HBase特质 连接HBase, 创建HBase执行对象 初始化配置信息&#xff1a;多条(hbase.zookeeper.…

ARM学习(28)NXP 双coreMCU IMX1160学习

笔者最近接触到一块IMXRT1160的双core板子&#xff0c;特依次来记录学习一下 1、IMXRT1160 板子介绍 介绍一下NXP的Demo板子&#xff0c;是一个双core的板子&#xff0c;Cortex-M7和Cortex-M4&#xff0c;总计1MB的RAM空间&#xff0c;256KB的ROM空间&#xff0c;提供了丰富的…

Window10磁盘的分盘和合并

注意&#xff1a; 当我们c盘不够大需要扩大磁盘空间时&#xff0c;当c盘后面没有未划分的磁盘时候&#xff0c;我们是无法进行扩充c盘的&#xff0c;此时&#xff0c;我们可以先删除后面一个磁盘&#xff0c;再进行扩大。 如下&#xff1a;c盘后没有未分配的空间&#xff0c;…

【项目管理常见问题大揭秘】每个管理者都要Get的「五维思维」~

走上管理岗☸要懂得五维思维 &#x1f4bc;自我管理——做自己的CEO 严于律己&#xff1a;严格要求自己&#xff0c;注重个人品牌建设 宽以待人&#xff1a;接纳不同观点&#xff0c;提升团队凝聚力 尊重事实&#xff1a;鼓励团队成员发挥优势&#xff0c;避免负面评价 坚守诚…

求助:西莫电子期刊 交流互助 传递

点击上方 “机械电气电机杂谈 ” → 点击右上角“...” → 点选“设为星标 ★”&#xff0c;为加上机械电气电机杂谈星标&#xff0c;以后找夏老师就方便啦&#xff01;你的星标就是我更新动力&#xff0c;星标越多&#xff0c;更新越快&#xff0c;干货越多&#xff01; 关注…

Java面经——SpringCloud微服务

SpringCloud SpringCloud的五大组件 注册中心网关远程调用负载均衡熔断降级 谈谈你对SpringCloud的理解 SpringCloud是为了解决微服务架构中出现的一系列服务治理难题的而提出的一套规范&#xff0c;统一了标准。降低了微服务架构的开发难度。有了 Spring Cloud 这样的技术生…

【android 9】【input】【8.发送按键事件2——InputDispatcher线程】

系列文章目录 本人系列文章-CSDN博客 目录 系列文章目录 1.简介 1.1流程介绍 1.2 时序图 2.普通按键消息发送部分源码分析&#xff08;按键按下事件&#xff09; 2.1 开机后分发线程阻塞的地方 2.2 InputDispatcher::dispatchOnceInnerLocked 2.3 InputDispatcher::disp…

使用C语言实现贪吃蛇(超详细)

目录 实现贪吃蛇我们要知道哪些&#xff1f; Easyx图形库 Easyx的安装 游戏思路 游戏实现 头文件的使用 ​编辑和食物以及控制方向的初始化 对于坐标的实现&#xff1a; 食物颜色的实现&#xff1a; 游戏数据的初始化 加载音乐 图形窗口的设置&#xff1a; 蛇身节数…

【动手学深度学习】多层感知机之暂退法问题研究详情

目录 &#x1f30a;问题研究1 &#x1f31e;问题研究2 &#x1f332;问题研究3 &#x1f30d;问题研究4 &#x1f333;问题研究5 &#x1f30c;问题研究6 &#x1f30a;问题研究1 如果更改第一层和第二层的暂退法概率&#xff0c;会发生什么情况&#xff1f;具体地说&am…

深入理解指针(4)--新手小白都能明白的指针解析

深入理解指针(4)–新手小白都能明白的指针解析 文章目录 深入理解指针(4)--新手小白都能明白的指针解析1. 回调函数2. qsort使用举例2.1 冒泡排序2.2 qsort函数介绍2.3 用冒泡排序实现qsort 结语 1. 回调函数 回调函数就是⼀个通过函数指针调用的函数 如果我们把函数的指针&a…

玩转微服务-GateWay

目录 一. 背景二. API网关1. 概念2. API网关定义3. API网关的四大职能4. API网关分类5. 开源API网关介绍6. 开源网关的选择 三. Spring Cloud Gateway1. 文档地址2. 三个核心概念3. 工作流程4. 运行原理4.1 路由原理4.2 RouteLocator 5. Predicate 断言6. 过滤器 Filter6.1. 过…

[图解]建模相关的基础知识-02

1 00:00:01,530 --> 00:00:05,200 第2个概念&#xff0c;谓词&#xff0c;Predicate 2 00:00:07,530 --> 00:00:10,800 或者叫断言&#xff0c;翻译各种各样都有 3 00:00:12,830 --> 00:00:15,050 实际上就是前面命题 4 00:00:15,060 --> 00:00:16,610 相当于常…

记录Nuxt 3 官网项目的一次部署

本来以为就是一次简单的部署&#xff0c;之前也是部署过几次nuxt项目了&#xff0c;所以&#xff0c;并没有要记录的想法。但是过程出现了很多问题&#xff0c;最后考虑还是写下来吧。留个记录&#xff08;完整的配置部署过程&#xff09; 这里我将要说明两种部署方式以供选择&…

开源网安软件安全国产化替代解决方案亮相2024澳门万讯论坛

近日&#xff0c;2024万讯论坛在澳门成功举办。本次论坛由万讯电脑科技主办&#xff0c;旨在引进国内尖端科技厂商&#xff0c;提供全方位的信创解决方案&#xff0c;分享信创化过程中所面临的挑战及阶段性转换经验。开源网安作为拥有软件安全领域全链条产品的厂商&#xff0c;…

Analytical Model(分析模型)和Compact model(紧凑模型)有什么不同

Analytical Model&#xff08;分析模型&#xff09; 和 Compact Model&#xff08;紧凑模型&#xff09; 在电子工程和半导体物理领域有着不同的应用和特点&#xff1a; Analytical Model&#xff08;分析模型&#xff09;: 理论基础&#xff1a;分析模型基于物理原理和数学公…