C语言中,如果表达式中即有逻辑与&&,又有逻辑或||,应该怎么算呢?
例如:int a =6, b = 4, c = 3,则表达式 a&&b+c||b++ - c 如何求解?是把a看成左侧表达式,把b+c||b++ - c看成右侧表达式,还是把
a&&b+c看成左侧表达式,b++ - c看成右侧表达式呢?
有说||优先级低于&&,所以||要后算,所以 0 && 1 || 1 && 1,这个式子应该先算0 && 1结果为0,再算1 && 1结果为1,再0||1结果为1,还有人说应该把0看成左侧表达式,右边的1||1&&1作为右侧表达式,因为0&& 将发生短路,所以整个右边的表达式都不算,而结果为0,两种做法结果相反,我在dev c++上测试结果为1,那么是否可以说&&与||相遇,应先算&&,再算||呢?求高人指点
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

已结题
C语言逻辑与和逻辑或混合运算,计算顺序
收起
- 写回答
- 好问题 0 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除
- 收藏 举报
4条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
追cium 2023-03-19 15:04关注参考GPT和自己的思路:
在 C 语言中,逻辑与 (&&) 和逻辑或 (||) 都是带有短路特性的逻辑运算符。具体来说,逻辑与运算符在表达式的左侧操作数为假时,会直接返回假而不再计算右侧操作数;而逻辑或运算符在左侧操作数为真时,也会直接返回真而不再计算右侧操作数。
当表达式中既有逻辑与又有逻辑或运算符时,需要按照优先级顺序和结合性进行计算。在 C 语言中,逻辑与的优先级高于逻辑或,因此在遇到这种情况时,要先计算逻辑与操作。如果逻辑与操作返回假,则整个逻辑或表达式的值也就确定为假。只有当逻辑与操作返回真时,才需要计算逻辑或操作,并根据右侧操作数的真或假来得到最终的结果。
在您提供的表达式 a&&b+c||b++-c 中,根据上述计算规则,需要首先计算 a && (b+c),再将其与 b++-c 做逻辑或运算。因为 a 的值为非零,因此 a && (b+c) 的结果为真;而 b++-c 的值为 1,因此最终表达式的值应该为真,即 1。
需要注意的是,虽然逻辑与和逻辑或都是带短路特性的运算符,但这并不是说在上述表达式中会有短路发生。因为在计算 a && (b+c) 的过程中,并没有出现任何可以导致短路的情况,所以整个表达式的值需要全部计算出来。如果您改变表达式中的变量值,可能会得到不同的结果。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览

轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2021-11-08 00:34回答 1 已采纳 #include <stdio.h> int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%d\n"
- 2021-07-31 14:12回答 1 已采纳 第一题:x = y-- <=x || x=y!=z;其实这个等式是一个错误的等式,因为等号的优先级最低,所以x=y!=z这里x后面的等号会报错。所以这里只能猜测出题者的意图,按照这个思路,公式可
- 2021-09-11 14:58回答 1 已采纳 由于<<运算符的优先级高于逻辑运算符&&和||,你所有的输出都是cout<<的这个变量,与逻辑或或者逻辑与没有任何关系。相当于都是直接输出了<<后面的整数变量。有帮
- 2024-11-05 02:33大数据专业的小沉的博客 本文主要是用于进一步学习数据结构及算法的C语言相关语法查询手册。
- 2023-02-19 15:14回答 2 已采纳 第二题,a--&&--b,首先计算 a--,结果为1,a变为0;前面a--为真,继续计算 --b,结果为b-1, 即0,b变为0; 表达式结果不成立,也就是 0。第三题,--a&&b--.,首先计算-
- 2022-11-02 07:50回答 1 已采纳 强制类型转化是最优先的。a强制类型转换后变为1。1➗2.0=0.5存入int型变量i中,由于i只能存整数,就变为了0。例如(int)0.8=0(int)1.2=1
- 2021-12-11 12:29回答 1 已采纳 下面是我的理解,不一定正确,仅供参考:首先执行b+c 和b-c,因为他们的优先级最高,得到 a||10&&0 ,然后执行10&&0,因为他们是第二优先级,得到a||0 ,接着执行a||0, 得到1.所
- 2021-07-27 23:52大力.MAX001的博客 C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。下面是小编收集的关于c语言基本符号,希望大家认真阅读!运算符的种类C语言的运算符可分为以下几类:1....
- 2023-01-17 08:00回答 3 已采纳 单个等号换成两个等号,if(i%5==1 && i%6==5 && i%7==4 && i%11==10) break要在循环或者swtich中使用,不能单独配合if使用
- 2022-10-01 01:54回答 1 已采纳 a=3: a+(a-=a*a) 先算括号里的 (a-=a*a):a=a-a*a a=3-9 此时a= -6 a+(-6)=-12
- 2022-11-03 03:06回答 3 已采纳 知识小课堂: ①&&运算符:逻辑与,两边都成立返回1,否则返回0 ②||运算符:逻辑或,只要任意一个成立就成立,并返回1,也就是真,都不满足才是返回0
- 2019-04-13 03:02本文将深入探讨如何使用51单片机实现一个具备加减乘除混合运算、连续计算功能的计算器,并关注其运算顺序判断的重要细节。 首先,51单片机是Intel公司8051系列的兼容产品,具有8位数据处理能力,适用于各种简单的...
- 2021-05-21 21:22我不是痘痘君的博客 组态王嵌入版的主要功能...能够帮助你实现复杂的逻辑操作和与决策处理方便的配方处理功能丰富的设备支持库,支持常见的PLC设备、智能仪表、智能模块组态王嵌入版的主要功能简介数据词典(实时数据库)数据词典(实时...
- 2022-11-13 07:28运算与逻辑单元(ALU):是计算机的核心组件,负责执行算术和逻辑操作。 内存单元(Memory Unit):是计算机存储数据和程序的部件。 分析(Analysis):是解决问题的第一步骤,涉及到问题的定义、数据收集和数据...
- 2023-12-07 03:15初级阶段:C语言基础入门:1 C语言的发展历史,环境安装及调试2 数据类型与运算符-scanf3 进制讲解-浮点数-字符型4 混合运算-scanf读取标准输入原理5 scanf循环读取-多种数据类型混合读取-printf讲解6 运算符与...
- 没有解决我的问题, 去提问
问题事件
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司