#include<stdio.h>
main()
{
int x=10,y=20;
if(!(!x)&&x)
printf("x=%d\n",x);
else
printf("y=%d\n",y);
return 0;
}
输出是10.怎么样? 请在每一步中显示x的值。
答案 0 :(得分:7)
首先,运算符优先级如下
() > ! > &&
现在,基于以上优先级解决
1. (!x) = 0
2. !(!x) = !(0) = 1
3. (1 && 10) = 1// hence, true.
4. hence, print x = 10
答案 1 :(得分:3)
(!x)
是一个布尔值,用于检查x是否为零,如果其操作数不为零则产生零,如果其操作数为零则产生一个。 if(!(!x))
相当于if(x)
,因为它会反转!x
,它是x的反转值。此结果与x
运算符的&&
结果相结合。由于两个条件都为真,因此执行if块
答案 2 :(得分:2)
!x
的值为0
,然后!(!x)
为1
,这是真的,if()
中的条件即(1 && 10)
变为真所以它会打印x=10
。
答案 3 :(得分:0)
(!x) ==> (!10) ==> 0
!(0) ==> 1
1 && 10 ==> 1
因此您将获得声明printf("x=%d\n",x);
已执行。
答案 4 :(得分:0)
因为x是10,
!x=0
!(!x)=1
1&&10
是真的
因此打印x
,即10