C语言问题希望有解释 谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/05 03:31:13
(23)设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是
?? A)(!a==1)&&(!b==0) ? B)a && b C)a||(b+b)&&(c-a)

A 选项为什么是0 !运算符怎么用的?最好能有个例子
??

逻辑求反!的优先级高于==(实际上刚才查了查,!的运算优先级非常高,甚至和~ & ++什么的一样高),所以先计算!a,这里就牵扯到了你的第二个问题

!运算符表示逻辑求反,只要是非零值求反就是0,0求反就是1,含义就是任何非零值表示真,0表示假,真(非零值)的求反就是假(0),倒过来一样

所以!a的值是0,而0==1显然是假,所以整个式子肯定是假

(!a==1)&&(!b==0) 因为!的运算级别是比==高的,所以(!a==1)中首先计算!a,a=2,所以!a=0,等价于0==1,得到的结果为0,所以A选项肯定是0咯

a=2 所以 !a==0 所以 !a==1为假 就是说他的值是0
b=3 所以 !b==0 所以 !b==0为真 就是说他的值是1

所以0&&1 = 0

a =2
!a = 0
!a==1 值为0

!运算符是把0转成非0
非0转成0