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

news2025/1/17 21:39:35

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


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

我们先放代码说话

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.coloradmin.cn/o/1458365.html

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

相关文章

【医学大模型】Text2MDT :从医学指南中,构建医学决策树

Text2MDT :从医学指南中,构建医学决策树 提出背景Text2MDT 逻辑Text2MDT 实现框架管道化框架端到端框架 效果 提出背景 论文:https://arxiv.org/pdf/2401.02034.pdf 代码:https://github.com/michael-wzhu/text2dt 假设我们有一…

使用Sora部署实时音视频通信应用实战项目

一、项目概述 本项目将构建一个在线教学平台,实现教师与学生之间的实时音视频通信。平台将提供教师上传课件、发起授课邀请,学生加入课堂、实时互动等功能。通过使用Sora,我们将确保音视频通信的稳定、流畅和低延迟。 目录 一、项目概述 二…

并发编程线程安全之同步锁Synchronized

一、原子性定义 原子性的本质是互斥访问,同一时刻只有一个线程对它进行访问操作 二、原子性问题的简述 public class AutomicDemo {int count 0;public static void main(String[] args) throws InterruptedException {AutomicDemo automicDemo new AutomicDem…

洛谷C++简单题小练习day15—计算阶乘小程序(不用循环)

day15--计算阶乘小程序--2.19 习题概述 题目描述 求 n!,也就是 123⋯n。 挑战:尝试不使用循环语句(for、while)完成这个任务。 输入格式 第一行输入一个正整数 n。 输出格式 输出一个正整数,表示 n! 代码部分 …

MySQL数据库基础(十一):多表查询

文章目录 多表查询 一、交叉连接(了解) 二、内连接 1、连接查询的介绍 2、内连接查询 3、小结 三、左外连接 1、左连接查询 2、小结 四、右外连接 1、右连接查询 2、小结 多表查询 一、交叉连接(了解) 它是所有连接…

Elasticsearch:将 IT 智能和业务 KPI 与 AI 连接起来 - 房间里的大象

作者:Fermi Fang 大象寓言的智慧 在信息技术和商业领导力的交叉点,蒙眼人和大象的古老寓言提供了一个富有洞察力的类比。 这个故事起源于印度次大陆,讲述了六个蒙住眼睛的人第一次遇到大象的故事。 每个人触摸大象的不同部位 —— 侧面、象牙…

Leetcode日记 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

Leetcode日记 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 二叉树简介二叉树分类解题方法制作不易,感谢三连,谢谢啦 二叉树简介 二叉树(Binary Tree)是一种特殊的树形…

UE蓝图 分支(Branch)节点和源码

系列文章目录 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 文章目录 系列文章目录一、分支节点功能二、分支节点用法三、分支节点使用场景四、分支节点实现过程五、分支节点相关源码 一、分支节点功能 在Unreal Engine(UE)的蓝图中&#xff0…

leetcode1049:最后一块石头的重量二

解题思路: 把石头堆分割成差不多的两堆,使得两堆差值最小 dp数组的含义: dp[j]:背包容量为j的背包最大重量(价值)为dp[j] dp[j] max(dp[j],dp[j-stones[i]] stones[i]) 初始化:(dp数组的大小根据题目进行定义&a…

华为配置旁挂二层组网隧道转发示例

配置旁挂二层组网隧道转发示例 组网图形 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响用户的业务使用。 组网需求 AC组…

【总结】linux命令行在个人用户下添加环境变量

一,简介 在工作过程中需要将对应的路径添加到个人用户的环境变量中,本文介绍如何添加,供参考。 二,操作步骤 非常简单,只需要找到对应配置文件,将路径添加进去即可。 2.1 找到配置文件 一般为用户名下…

【无标题】力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景: 做单链表反转题目,报错:member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候,已经处理了n2->next情况却依然报错 这个报错提示含义是:大概就…

react封装通用Modal弹窗组件

目录 1、【src/component/modal/hoc.js】 2、【src/component/modal/componentModal.js】 3、【src/page/projectView.js】 【说明】:后台管理的项目中会经常遇到弹窗,于是封装了一个简单的公共弹窗组件 这个公共组件不适用复杂的功能,简单的…

力扣题目训练(17)

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练,今…

第五次作业(防御安全)

需求: 1.办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP 不能用来转换) 2.分公司设备可以通过总公司的移动链路和电信链路访问到DMZ区的http服务器 3.分公司内部的客户端可以通过公网地址访问到内部的服务…

力扣OJ题——相交链表

题目:160. 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 思路一(暴力求解): A链表的每个节点依次跟B链表中节点进行…

xshell 修改时间破解使用

文章目录 xshell 修改时间破解使用:question: 问题:point_right: 解决方案: xshell 修改时间破解使用 参考地址:博客地址 ❓ 问题 问题 ​ 当前 xshell 官方提供免费的个人版本供使用,但是在官网升级新版本后则需要进行升级之后才能使用&…

调用接口时不时出现 Error: socket hang up

项目场景: 提示:这里简述项目相关背景: 今天采用golang创建了一个http服务,准备对若干接口进行测试。 问题描述 提示:这里描述项目中遇到的问题: 在测试第一个接口时,发现采用postman调用接口…

Fisher-Yates乱序算法

乱序算法 public class Test07 {public static void main(String[] args) {//乱序算法int[] arr {1,2,3,4,5,6,7,8};//逆序遍历 且这个随机的下标不能使要交换的元素的本身for(int i arr.length-1;i>0;i--){//产生一个随机的下标与当前元素进行交换int index (int)(Math…

文件包含+文件上传漏洞(图片马绕过)

目录 一.文件包含二.文件上传三.图片马四.题目 一.文件包含 将已有的代码以文件形式包含到某个指定的代码中,从而使用其中的代码或者数据,一般是为了方便直接调用所需文件,文件包含的存在使得开发变得更加灵活和方便(若对用户输入…