C运营商订单

时间:2015-10-19 13:35:37

标签: c operators

为什么在以下示例中的赋值(=)运算符之后执行后缀增量运算符(++)?根据{{​​3}} ++具有比=更高的优先级,因此应首先执行。

int a,b;
b = 2;
a = b++;
printf("%d\n",a);

将输出a = 2。

PS:我原则上知道++ b和b ++之间的区别,但只看运算符优先级,这些precende列表告诉我们一些不同的东西,即++应该在=

之前执行

4 个答案:

答案 0 :(得分:7)

首先评估

++ 。它是后递增的,意味着它计算存储的值,然后然后递增。赋值表达式右侧的任何运算符(逗号运算符除外)都在赋值本身之前进行求值。

答案 1 :(得分:3)

是的。只是在概念上,++发生在{em>整个表达式a = b++(具有值a的表达式)之后,才会发生setDT(df1)

答案 2 :(得分:2)

运算符优先级操作数评估的顺序是C中相当高级的主题,因为存在许多指定了自己的特殊情况的运算符。

Postfix ++就是这样一种特殊情况,由标准以下列方式指定(6.5.2.4):

  

结果的值计算在侧面之前排序   更新操作数存储值的效果。

这意味着编译器会将行a = b++;转换为以下内容:

  • b的值读入CPU寄存器。 (“结果的价值计算”)
  • 增加b。 (“更新储值”)
  • 将CPU寄存器值存储在a

这使得postfix ++与前缀++不同。

答案 3 :(得分:0)

增量运算符执行两项操作:向数字添加+1并返回值。后增量和预增量之间的差异是这两个步骤的顺序。因此,实际上首先执行增量,然后在任何情况下执行赋值。

相关问题