14、逻辑运算符

1、逻辑与&&和逻辑或 ||

首先看一个程序

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

	printf("%d\n", i);    	//1
	printf("%d\n", j);		//0
	printf("%d\n", k);		//0

	return 0;
}

易错点:因为很多人会觉得&& 运算的优先级是要比 || 要高的,所以很多人会先对后半部分先进行运算,导致得出结论:i= 0,j = 1,k = 1。

短路规则:
—— || 从左向右开始计算
当遇到真时立即停止计算,整个表达式为真;当所有表达式都为假时,才为假。

—— && 从左向右开始计算
当遇到假的条件时停止计算,整个表达式为假;当所有表达式都为真时,才为假。

所以,上面分析错误的原因在于它没有遵循短路规则里面的从左向右开始计算。应该先计算 || 的表达式,左边为真,右边可以不进行计算,所以i= 1,j = 0,k = 0 。

对于&&和 || 的混合运算,
—— 整个表达式被看做 || 表达式
—— 从左向右开始计算&&表达式
—— 最后计算 || 表达式

++i || ++j && ++k 可以转换成(true&&++i)||(++j && ++k ),当前面的表达式为真时,后面的表达式可以不用计算。

在此纠正一下:&& 运算的优先级是要比 || 要高,并不是两个一起混合运算先算&&,而是先把他们转化为 || 表达式,在这个基础上先算&&。

2、逻辑非 !

遇 0 返回 1,否则统统返回 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值