if语句中的赋值运算符

时间:2016-08-18 03:45:59

标签: c

int a = 0, b = 0, c = -1;

if (b = a || b == ++c )
    a+=3;

为什么a,b和c 3,1,0的值分别是?更具体地说,为什么是b 1而不是0?

2 个答案:

答案 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,即||现在1a的{​​{1}}是1

最后将结果1分配给b。因此if语句的整体执行求值为true,a的值递增{{1} }。

最后是3的价值。