增量分配

时间:2011-09-23 17:23:44

标签: c variable-assignment

我已经使用C ++多年了,但只是意识到增量赋值的一些可疑之处。

我有这个片段

  a = 4; 
  b = 2;
  c = 0;
  c = c + a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
  c = c + a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
  c +=    a < b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
  c +=    a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
  c +=    a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);

结果是

a: 4    b: 2    c: 1
a: 4    b: 2    c: 1
a: 4    b: 2    c: 1
a: 4    b: 2    c: 2
a: 4    b: 2    c: 3

如果您注意,前两行是相同的。或者在第一个c = c + a&gt;之后'c'没有得到更新。 b; 但是,当我们使用增量赋值+ =

时,c的值会更新

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

<的优先级低于+

c = c + a > b;被解释为c = (c + a) > b;

就是这样,没有必要成为一个理由,但是如果有一个原因,那么人们可能更常比较算术表达式,而不是使用算术表达式中的比较结果。

答案 1 :(得分:2)

在第一行中,c + a > b为真,转换为1,因此第一行显示为c = 1;。冲洗并重复。

答案 2 :(得分:1)

编译器将您的代码解释为c =(c + a)&gt; b您可能希望将其解释为c = c +(a> b)。