易错题(关于运算符优先级及结合性问题)

这篇博客探讨了C语言中的逻辑运算符优先级和结合性,通过一个具体示例解释了逻辑运算符!、&&和||的使用。文章指出在解决逻辑表达式时,需要注意运算符的优先级和短路特性,以正确评估表达式的值。示例中,变量d的值被计算为1,揭示了逻辑运算在特定情况下的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int main()
{
	int a = 5, b = 4, c = 0, d;
	d = !a && !b || !c;
	printf("%d\n", d);
}

这题答案是1

首先,我们得清楚,运算符优先级高低及结合性

1.单目运算符(++,--,-,!,sizeof,*,&)>双目运算符(两个操作数)>大于三目运算符

2.算数运算符>比较运算符>逻辑运算符>条件运算符>赋值运算符>逗号运算符

3.单目除了强制( ),下标[ ],成员->,.都是自右向左

例如:-i++,-和++都是自右向左,即-i++=-(i++),假如i=5,-i++=-5,i的最终值为6

注意:自增运算符只能用于变量,不能用于表达式

,双目除了赋值都是最左向右,三目(条件)自右向左

例如:y=(x>10)?(x/10):x>0?x:-x;相当于y=(x>1r0)?(x/10):(x>0?x:-x);

然后,看上面这道题

我原本以为,!a=0,后面是&&,就都不用看了,实际上&&后面没有(  ),不能看作一个整体,即

d=0||1=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值