Bruce_N 2023-03-19 23:01 采纳率: 57.1%
浏览 31
已结题

C语言逻辑与和逻辑或混合运算,计算顺序

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,那么是否可以说&&与||相遇,应先算&&,再算||呢?求高人指点

  • 写回答

4条回答 默认 最新

  • 追cium 2023-03-19 23: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) 的过程中,并没有出现任何可以导致短路的情况,所以整个表达式的值需要全部计算出来。如果您改变表达式中的变量值,可能会得到不同的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么