int a = 0, b = 0, c = -1;
if (b = a || b == ++c )
a+=3;
为什么a,b和c 3,1,0的值分别是?更具体地说,为什么是b 1而不是0?
答案 0 :(得分:6)
由于||
的优先级高于=
,因此它会被解析,就好像您已经写好了一样。
if (b = (a || (b == ++c)))
这会计算a || (b == ++c)
。这是正确的,因为b == 0
和++c == 0
,因此b == ++c
为真,而且1
为真。
添加括号以获得所需内容:
if ((b = a) || (b == ++c))
但恕我直言,通常最好避免编写这样复杂的表达方式。将它们作为单独的陈述:
b = a;
if (b || b == ++c)
答案 1 :(得分:0)
一旦您清楚了解运算符的优先级,您就可以轻松解决此类问题。请通过this 了解C中的运算符优先级。
在完成优先级列表之后,您应该会看到我的答案,因为这样你的内心就会更容易理解。
现在,回答你的问题......
在上述代码中使用的所有运算符中,++c
具有最高优先级。因此c
的值变为0
,然后比较c
的值评估b
b == ++c
true
的值为1
,即||
现在1
和a
的{{1}}是1
。
最后将结果1
分配给b
。因此if
语句的整体执行求值为true,a
的值递增{{1} }。
最后是3
的价值。