int a = 0, b = 0, c = -1;
if (b = a || b == ++c)
a+=3;
为什么a,b和c分别为3,1,0?更具体地说,为什么是b 1而不是0?if语句中的赋值运算符
int a = 0, b = 0, c = -1;
if (b = a || b == ++c)
a+=3;
为什么a,b和c分别为3,1,0?更具体地说,为什么是b 1而不是0?if语句中的赋值运算符
一旦你与运营商的优先级清楚,这将是您轻松通过this应对这种类型的questions.Go的了解运算符优先级在C
你应该在通过优先级列表后看到我的答案,因为那样它会在你的脑海中更容易得到。现在
,来到你的问题....
开始在上面的代码中使用的所有运营商,++c
有c
最高precedence.So值变为0
,然后价值c
相比的b
这里b == ++c
值计算结果为true
即1
现在的1
和a
||
被认为是1
。
最后。所以if
报表的总体执行结果为true和a
值由3
递增这个结果1
被分配到b
。因此最后的值为a=3,b=1 and c=0
。
因为||
的优先级高于=
,所以它的分析就像你写的一样。
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)
你为什么期望它是0? – user2357112
用parens来阐明操作顺序: 'if(b =(a ||(b == ++ c)))' – qxz
@ sri.vatsa:“为什么是b 1而不是0”...为什么不? – AnT