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