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)(!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