#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 的值。
一、运算符优先级如下
() > ! > &&
现在,根据上述优先级求解
1. (!x) = 0
2. !(!x) = !(0) = 1
3. (1 && 10) = 1// hence, true.
4. hence, print x = 10
(!x)
是一个布尔值,用于检查 x 是否为零,如果其操作数不为零则产生零,如果其操作数为零则产生一。if(!(!x))
等价于if(x)
,因为它反转!x
了 x 的反转值。该结果与操作员的结果相x
结合&&
。由于两个条件都为真,因此执行 if 块
!x
is0
和 then!(!x)
的值1
是 true 并且if()
ie中的条件(1 && 10)
变为 true 所以它打印x=10
。
由于 x 是 10,
!x=0
!(!x)=1
1&&10
是真的
因此打印x
,即10
(!x) ==> (!10) ==> 0
!(0) ==> 1
1 && 10 ==> 1
所以你会得到语句printf("x=%d\n",x);
被执行。