C语言逻辑运算

逻辑运算:

           对于逻辑运算来说,结果操作数(运算符的作用对象)都只有两个状态,即真(1)假(0)

           对于操作数来说,非0即为1(只要操作数不为0,就视为1)。

逻辑运算符:

           1. &&(逻辑与):当逻辑与两边操作数都为真(1)时结果为真(1)

               可视为乘法运算(只有1×1时为1,0×1以及1×0都为0),因此操作数都为真时才为真

           2. ||(逻辑或):当逻辑或两边的操作数都为假(0)时结果为假(0)

               可视为加法运算(只有0+0时为0,1+1,0+1,1+0都为1),因此操作数都为假时才为假

           3. !(逻辑非):逆转操作数状态,真变假,假变真

结合性(即运算顺序):

           &&(从左到右),||(从左到右),!(从右到左)

           C语言中,除了赋值运算符,条件运算符,单目运算符是右结合性(即从右到左),其余均为左结合性(从左到右,)当多种运算符同时参与运算时,先考虑运算符的优先级,优先级相同时根据结合性来确定运算顺序(如-i++中-和++优先级相同,-与++都是右结合性,所以-i++等同于-(i++))。

优先级:

单目右左,算术关系,逻辑单双三赋值逗号(目即操作数,单目为一个操作数,双目为两个操作数,以此类推)。

            单目右(左)运算符:操作数在左(右),符号在右(左)的运算符:++(单目右运算符i++),++(单目左运算符++i)。

当单目左++(--)或单目右++(--)出现在逻辑运算符两侧时。i++是先将i的值代入表达式进行运算,在语句结束后i的值才加1,而++i是先将i+1,将(i+1)的值代入表达式进行运算。如左图所示,将i=0代入表达式,得出表达式为假(0),该语句结束后i的值加1,所以i为1,。如右图所示,将(i=i+1)的值即1代入进行运算,得出表达式为真,i也为1

            算术关系(算术运算符,关系运算符)

            逻辑单双三(逻辑单目运算符,逻辑双目运算符,逻辑三目运算符)

             赋值逗号(赋值运算符,逗号)

注:详细的运算符优先级可查阅以下几个网站,多写多练才能更加熟悉。

C语言,运算符优先级口诀 - 知乎 (zhihu.com)

C语言重要知识点总结【5】:C语言34种运算符优先级及结合性_运算符丰富_星空之路Star的博客-CSDN博客

C 运算符 | 菜鸟教程 (runoob.com)

短路法则:

对于逻辑与运算符 &&,如果侧的操作数为(即结果为0),则右侧的操作数将不会被求值。因为无论右侧的操作数是什么,整个逻辑表达式的结果都将是假。

由图可知当&&左侧为假时,++j没有被执行,所以j的值为0,当&&左侧为真时,++j被执行,所以j的值为1。

对于逻辑或运算符 ||,如果侧的操作数为(即结果为非零),则右侧的操作数将不会被求值。因为无论右侧的操作数是什么,整个逻辑表达式的结果都将是真。

由图可知当||左侧为真时,++j没有被执行,所以j的值为0,当||左侧为假时,++j被执行,所以j的值为1。

如果你掌握了上述内容,请试着求

#include <stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    int k = 0;

    i++ && ++j || ++k;
  
    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("k = %d\n", k);

    return 0;
}

你可以试着改变&&与||的顺序,++的顺序(++i,i++,++j,j++,++k,k++)

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值