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

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

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

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月20日
  • 创建了问题 3月19日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部