部分逻辑运算符详解

一、逻辑运算符

C语言有3种逻辑运算符,其逻辑运算对象可以是关系表达式或逻辑表达式,逻辑预算的结果只有”真“或”假“。

单目运算符: !逻辑非

双目运算符: &&逻辑与          || 逻辑或

逻辑非(!):逻辑非运算符的对象如果为”真,那么结果为”假“;若对象为”假“;则结果为”真“

逻辑与(&&):逻辑与运算符的两个逻辑运算对象只要有一个为”假“,那么结果就是”假“,两个都为真,结果才为真

逻辑或(||):逻辑或运算符的两个逻辑运算对象只要有一个为真,那么结果就是真,两个都为假,结果才为假。

二、逻辑运算符的使用

其中!是单目运算符,&&与||是双目运算符,C语言中单目运算符的优先级是高于双目运算符的,所以逻辑非(!)的运算优先级高于关系运算符。而逻辑与(&&)和逻辑或(||)的优先级低于关系运算符。

逻辑运算符经常与if语句搭配使用,用它可以连接关系表达式,例如表示x是否在闭区间[+1,1]中可以表示为if (x >= 1 && x <= 1),表示x>=-1且x<=1那么此表达式的值才为“真”,才会执行if下的语句

注意!!!

逻辑运算符的使用会出现短路的现象,例如当x=-2时,那么if (x >= 1 && x <= 1)这个语句的第一个语句x>-1就为假,此时就可以判断出这个逻辑语句的结果一定就为”假“,程序就不会执行后面一句判断如果后面有改变x值的语句比如if(x>=-1&&x++<=1),那么此时x++就不会执行,即执行完此if语句后,x的值仍然为-2.一定注意!!!

踩坑如下:(来源于梯队测试题目)

void Error1(void)
{
		int a = -2, b = 2;
		for (; ++a && --b;);
		printf("%d,%d\n", a, b);
		//结果为0,1;
		//经测试预测逻辑:for循环终止条件为0,发生于0 && x(x为任意值)或 x && 0
        //出现”短路“情况,判断后b未更改赋值,仅改变a值后直接判断结束循环
		//当且仅当这两种情况才能终止循环:若将a赋值为-5,
        //则由b先到达0值结束循环,故最终结果为-3,0
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值