【C语言的小角落】逻辑与逻辑或混合计算

在这里插入图片描述
关注小庄 顿顿解馋(≧◡≦)


引言:本篇博客小庄带领小伙伴们解决一个比较角落有时头疼的问题—关于逻辑与和逻辑或结合运算的问题,请放心食用~

我们先放代码说话

int main()
{int x = 1;int y = 3;int z = 4;if(x==1 || ++y && ++ z){;} printf("y = %d z = %d",y,z);return 0;
}

输出结果为 y = 3 z = 4

有的小伙伴可能会疑惑这里的&&不是优先级比| |高,z和y不是都该加1 ??这里我们给&&的表达式加上一个括号

int main()
{int x = 1;int y = 3;int z = 4;if(x==1 || (++y && ++ z)){;} printf("y = %d z = %d",y,z);return 0;
}

输出结果 y = 3 z = 4

结论:``在逻辑表达式(注意是逻辑表达式中),运算符的优先级改变的是结合顺序而不是运算顺序。

对于我们的逻辑表达式,一般都是从左往右执行的,所以这里应该是先运算逻辑或操作符再计算逻辑与,那这里说的结合性又是怎么回事呢?看下面的分析

x==1 || ++y && ++ z 对于这个表达式先执行按位或是毫无疑问的,但由于&&优先级较高,所以式子等价于
x == 1 || (++y && ++ z) ,也就是说 || 左边是一个整体 右边括号括起来的是一个整体,由于左边部分表达式为true,所以整个表达式短路右边括号括起来的部分直接就不计算了。

总结:
1.对于&&和| | ,我们要看作是xxx||xxx和xxx&&xxx,xxx可以是一个数或表达式等
2.受优先级的影响,导致一部分操作数先结合视为一个整体而不是先运算

我们趁热来另一道变形

int main()
{int x = 1;int y = 3;int z = 4;if(x==0 && ++y || ++ z){;} printf("y = %d z = %d",y,z);return 0;
}

输出结果 y = 3 z = 5
跟之前分析一样表达式等价于(x==0 && ++y) || ++ z ,转化为xxx || xxx ,左边括起来的部分由于x不为1直接短路所以右边的++y不计算,故左边的xxx就是0,由于逻辑或短路特性,继续计算++y

那要是不混合的呢?

int main()
{int x = 1;int y = 3;int z = 4;if(x==0 && ++y && ++ z){;} printf("y = %d z = %d",y,z);return 0;
}

输出结果 y = 3 z = 4
此时就得利用我们的结合性了,结合性是在同等优先级情况下使用的来运算顺序,此时应该是从左往右执行也就是(x==0 && y)&& ++z


本次分享若有错误请小伙伴们指出,不妨来个一键三连吧~

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

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

相关文章

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

前言 Vue 是前端开发中非常常见的一种框架,它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中,组件的开发也变得非常简单,但随着 Vue3 版本的发布,组件开发有了更多的特性和优化,为我们的业务开发带…

第十四章[面向对象]:14.1:类和实例

一,认识面向对象编程 1,什么是面向对象编程? 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 2,面向对象最重要的两个概念就是类(Class)和实例(Instance) 类是抽象的…

戴尔Dell R740服务器开机冒烟亮黄灯故障维修

今天分享的是一台过保修期的DELL PowerEdge R740服务器开机冒烟的维修案例。先上图: 接到用户报修后工程师立即响应,由于用户也是刚开工第一天服务器开机就出现了这种祥龙吐雾的祥兆,导致工厂业务流程无法正常使用,这台机器在东莞…

【Linux取经路】文件系统之重定向的实现原理

文章目录 一、再来理解重定向1.1 输出重定向效果演示1.2 重定向的原理1.3 dup21.4 输入重定向效果演示1.5 输入重定向代码实现 二、再来理解标准输出和标准错误2.1 同时对标准输出和标准错误进行重定向2.2 将标准输出和标准错误重定向到同一个文件 三、再看一切皆文件四、结语 …

RK3588平台开发系列讲解(视频篇)ffmpeg 的移植

文章目录 一、ffmpeg 介绍二、ffmpeg 的组成三、ffmpeg 依赖库沉淀、分享、成长,让自己和他人都能有所收获!😄 📢ffmpeg 是一种多媒体音视频处理工具,具备视频采集功能、视频抓取图像、视频格式转换、给视频加水印并能将视频转化为流等诸多强大的功能。它采用 LGPL 或 G…

「Java同步原理与底层实现解析」

原理概要: java虚拟机中的同步基于进入与结束Monitor对象实现,无论是显式同步(同步代码块进入在jvm是根据monitorenter标志、结束是monitorexit标志,那最后一个是monitorexit是异常结束时被执行的释放指令)、隐式同步…

c++学习第十七讲---STL常用容器---list容器

list容器&#xff1a; 一、list基本概念&#xff1a; list容器&#xff1a;一个双向循环链表。 注&#xff1a;list和vector是两个最常用的容器&#xff0c;各有优缺点。 二、list构造函数&#xff1a; list<T> lst; //默认构造 list(b…

力扣算法Algorithm竞赛模板库(codeforces-go):含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

1.算法Algorithm竞赛模板库&#xff08;codeforces-go&#xff09; 算法竞赛模板库&#xff0c;为算法竞赛爱好者提供了一系列精心设计的算法模板。这个库包含了算法竞赛中常用的数据结构和算法实现&#xff0c;助力开发者更高效地解决问题 一个算法模板应当涵盖以下几点&…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(四)之Helm及cert-manager安装

安装Helm(三台都安装) 下载helm安装包并加入执行目录 tar zxf helm-v3.2.4-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/bin/ helm version添加rancher稳定版仓库(三台都安装) helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/serve…

【Kotlin】Kotlin流程控制

1 选择结构 Kotlin 中选择结构主要包含 if -else、when 语句&#xff0c;并且可以返回结果。 1.1 if-else 1.1. 条件选择 fun main() {var score 85if (score > 90) {println("优秀")} else if (score > 80) {println("良好")} else if (score &…

知识蒸馏实战代码教学二(代码实战部分)

一、上章原理回顾 具体过程&#xff1a; &#xff08;1&#xff09;首先我们要先训练出较大模型既teacher模型。&#xff08;在图中没有出现&#xff09; &#xff08;2&#xff09;再对teacher模型进行蒸馏&#xff0c;此时我们已经有一个训练好的teacher模型&#xff0c;所以…

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096

使用centos安装,注意安装之前,保证系统可以联网,然后执行yum update 先去更新一下系统,可以省掉很多麻烦 20240219_150031 这里我们使用centos系统吧,使用习惯了. ChatGlm首先需要一台个人计算机,或者服务器, 要的算力,训练最多,微调次之,推理需要算力最少 其实很多都支持C…