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

(全文结束)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes小记

Kubernetes 集群 架构 一个有效的 Kubernetes 部署称为集群&#xff0c;可以将 Kubernetes 集群分为两个部分&#xff1a;控制平面与计算设备&#xff08;或称为节点&#xff09;控制组件 控制平面 K8s 集群的神经中枢,负责处理重要的工作&#xff0c;以确保容器以足够的数量…

ws2812 arduino

问题 乱闪 电源问题 gpio 系统问题 中断式发送 asrpro 上电初始化 引脚 输出 并 写入0 系统启动后 设置引脚复用 gpio (据说为电源问题&#xff0c;调低亮度可&#xff0c;但usb上还是出现 双循环闪 呼吸灯 计数 int s0[3] {0,11,10}; int s1[3] {1,0,11}; int *a[2] {…

Nginx作为下载站点

grep -Ev ^$|# /usr/local/nginx/conf/nginx.conf > /opt/nginx.txt cat /opt/nginx.txt > /usr/local/nginx/conf/nginx.conf用上面的指令提取最小化的配置文件 vim /usr/local/nginx/conf/nginx.conf [rootlocalhost ~]# cat /usr/local/nginx/conf/nginx.conf worker…

充电宝哪个牌子值得买?一文看懂充电宝哪个牌子更好用!

在这个快节奏的数字时代&#xff0c;智能手机、平板电脑等电子设备已成为我们日常生活中不可或缺的一部分。然而&#xff0c;这些智能设备的电池续航能力往往难以满足我们全天候的需求&#xff0c;尤其是在出行、旅行或紧急情况下&#xff0c;电量告急成了许多人的“电量焦虑”…

【C语言训练题库】扫雷->简单小游戏!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码 4. 小结 1. 题目 小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵&#xff0c;他希望你帮他生成一个扫雷矩阵。 扫雷…

【STREAMPARK】streampark构建运行git应用

1、新建项目 2、填写git 信息 包含地址 账号 密码 以及pom&#xff08;默认读取项目根目录下的pom&#xff09; 3、添加应用 4、填写 要部署的应用的信息 &#xff0c;提交 5、然后构建运行 6、运行失败&#xff0c;查看日志详情&#xff1b;成功&#xff0c;查看应用…

DHCP、FTP

DHCP、FTP DHCP&#xff08;动态主机配置协议&#xff09; 服务器配置好了地址池 192.168.233.10 192.168.233.20 客户端从地址池当中随机获取一个ip地址&#xff0c;ip地址会发生变化&#xff0c;使用服务端提供的ip地址&#xff0c;时间限制&#xff0c;重启之后也会更换。…

对 SQL 说“不”~

开发人员注意&#xff01; 您在当前的应用程序架构中是否面临这些问题&#xff1f; 对 SQL 数据库的高吞吐量。SQL 数据库中的瓶颈。 内存数据存储将是解决问题的方案。Redis 是市场上最受欢迎的内存数据存储和缓存选项。Redis 拥有广泛的生态系统&#xff0c;因为主要科技巨…

二,几何相交-5,BO算法分析--(1)正确性

也就是说&#xff0c;BO算法有没有可能误报或者漏报&#xff1f; 一&#xff0c;为什么不会误报&#xff1f; 因为两条线段从不相邻到相邻&#xff0c;或者其中一条线段不存在到相邻&#xff0c;都会进行一次相交测试。所以不会误报。 二&#xff0c;为什么不会漏报&#xff1…

文件夹如何加密码全攻略,5个文件夹加密方法新手也能学

文件夹如何加密码&#xff1f;在这个互联网时代&#xff0c;隐私保护越来越受到大家的重视。我们在日常工作中&#xff0c;有时候会接触一些比较重要的文件&#xff0c;为了不让这些文件信息被泄露&#xff0c;所以我们可以给文件夹设置密码保护。那要怎么给文件夹设置密码呢&a…

达人邀约软件工具,券小妹邀约软件,支持商家版团长版,一键邀约达人工具

达人邀约软件&#xff1a;抖音商家、团长及快手商家的高效助手&#xff01; 券小妹邀约工具是一款专为抖音商家、团长和快手商家设计的达人邀约工具&#xff0c;主要是为了简化邀约、沟通和报名流程。 券小妹邀约工具的主要功能有&#xff1a; 1. 一键批量邀约达人 2. 批量发…

一个州凭什么引领美国量子技术革新?

不要低估一个州&#xff0c;它可能美国量子技术发展的中流砥柱。 科罗拉多州&#xff0c;产生了四位量子科学领域的诺贝尔奖得主&#xff0c;汇聚了3000多名量子科技精英&#xff0c;更拥有多家顶级量子初创公司&#xff0c;例如离子阱量子计算公司Quantinuum、原子技术公司At…

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

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

Python 机器学习 基础 之 【实战案例】新闻内容分类实战

Python 机器学习 基础 之 【实战案例】新闻内容分类实战 目录 Python 机器学习 基础 之 【实战案例】新闻内容分类实战 一、简单介绍 二、新闻内容分类实战 三、数据准备 四、分词与清洗工作 1、读取数据 2、使用 jieba 分词器进行分词&#xff0c;使用 Pandas 创建Data…

【网络层】IP因特网协议解析

文章目录 IP报文结构分片TTL&#xff1a;time to live 生存时间 &#xff08;生命值&#xff09;Protocol 协议 网络层位于数据链路层与传输层之间。网络层中包含了许多协议&#xff0c;其中最为重要的协议是IP协议。网络层提供IP路由功能。 IP报文结构 版本version&#xff1…

20240604将OK3588-C的核心板刷机Buildroot之后强制横屏

20240604将OK3588-C的核心板刷机Buildroot之后强制横屏 2024/6/4 17:13 viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508/kernel/arch/arm64/boot/dts/rockchip$ grep dsi0 . -R ./Makefile:dtb-$(CONFIG_ARCH_ROCKCHIP) rk3568m-serdes-evb-display-dsi…

【玩转C语言】第一讲--->C语言概念

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 引言&#xff1a; 1. C语言是什么 2. C语言的辉煌历史 3. 第一个C语言程序 4. main()函数 5. printf() 函数 6. 库函数 6.1 库函数概念 7. 关键字介绍 …

巨详细Linux安装MySQL

巨详细Linux安装MySQL 1、查看是否有自带数据库或残留数据库信息1.1检查残留mysql1.2检查并删除残留mysql依赖1.3检查是否自带mariadb库 2、下载所需MySQL版本&#xff0c;上传至系统指定位置2.1创建目录2.2下载MySQL压缩包 3、安装MySQL3.1创建目录3.2解压mysql压缩包3.3安装解…

Kubernetes——Ingress详解

目录 前言——Service策略的作用 1.外部访问方案 2.使用场景和限制 2.1NodePort 2.2LoadBalancer 2.3externalIPs 2.4Ingress 3.Ingress如何实现对外服务 4.LB和Ingress结合起来实现对外服务的过程 一、Ingress 1.定义 2.组成 3.工作原理 4.总结 二、部署Nginx-I…

clickhouse学习笔记(二)数据类型

目录 一、基础数据类型 1、整数类型 2、浮点数类型 3、布尔类型 4、字符串和固定字符串 5、日期和时间类型 6、创建基础数据类型的建表语句及插入语句 二、复合数据类型 1、数组 2、元组 3、枚举类型 4、嵌套数据结构 5、Map 三、特殊数据类型 1、低基数编码&…