逻辑运算符与++的使用与优先级差别

我们的教材通常会按级次区别优先级,如下图所示:

那对于一个简单的编程题:
int a,b,c,y;a=b=c=1;y = ++a||++b&&++c
此时输出结果为:y=1,a=2,b=1,c=1
按照逻辑运算符&&优先于||,结果不应该为2,2,2吗?对此,我进行了多次调试,并得出以下结论。
以三个代表程序举例:

#include<stdio.h>
int main()
{
    int a,b,c,y;
    a=b=c=1;
    y = ++a||++b&&++c;
    printf("%d,%d,%d,%d",y,a,b,c);
    getchar();
    return 0;
}
//结果为1,2,1,1
#include<stdio.h>
int main()
{
    int a,b,c,y;
    a=0;
    b=c=1;
    y = ++a||++b&&++c;
    printf("%d,%d,%d,%d",y,a,b,c);
    getchar();
    return 0;
}
//结果为1,1,1,1
#include<stdio.h>
int main()
{
    int a,b,c,y;
    a=b=c=0;
    y = ++a||++b&&++c;
    printf("%d,%d,%d,%d",y,a,b,c);
    getchar();
    return 0;
}
//结果为1,1,0,0

可以得出几个结论:
1、||和&&优先级相等,且都是从左往右运算
2、在出现||和&&的语句中,不对a++进行运算,只判断它的初值。当这条语句结束后,涉及判断的表达式就会进行相应的运算(如:a++)。
3、在&&运算中,如果&&前面的逻辑值为0(如:令a=0; a++&&b++,此时,a还没有进行++运算,仍为0。但是在本语句结束后就自加1),则结束本语句;如果&&前面的逻辑值为1,则继续判断&&后面的值是否为1,如果为1,则继续判断后面的逻辑运算;如果为0,而结束本语句。
4、在||运算中,如果||前的逻辑值为1,则结束本语句。如果||前的逻辑值为0,则继续判断,若||后的逻辑值为1,则结束本语句。

图片来自《C语言入门经典》

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值