C递增/递减运算符

时间:2014-02-12 02:12:35

标签: c

执行计算后确定每个变量的值。执行前所有变量的值都为5。

  1. A1/=++B1/--C1
  2. A2+=++B2%C2--
  3. 请告诉我这项工作是怎样的

2 个答案:

答案 0 :(得分:2)

变量:

int A1 = 5;
int B1 = 5;
int C1 = 5;

int A2 = 5;
int B2 = 5;
int C2 = 5;

您的代码:

A1 /= ++B1 / --C1;
A2 += ++B2 % C2--;

也可能会编译成类似的东西:

++B1;
--C1;
A1 /= B1 / C1;

++B2;
A2 += B2 % C2;
C2--;

您可以使用编译器输出ASM,GCC是-S标志。这是我的计算机上带有GCC的ASM输出(我添加了注释):

movl    $5, -20(%rbp) // A1 = 5
movl    $5, -24(%rbp) // B1 = 5
movl    $5, -28(%rbp) // C1 = 5
movl    $5, -32(%rbp) // A2 = 5
movl    $5, -36(%rbp) // B2 = 5
movl    $5, -40(%rbp) // C2 = 5

然后对于第一个计算,执行此操作(为简化理解而简化了注释):

addl    $1, -24(%rbp)      // ++B1
subl    $1, -28(%rbp)      // --C1
movl    -24(%rbp), %eax    // 
cltd
idivl   -28(%rbp)          // divide B1 by C1
movl    %eax, %esi         // 
movl    -20(%rbp), %eax    // 
cltd
idivl   %esi               // divide A1 by the previous
movl    %eax, -20(%rbp)

答案 1 :(得分:0)

由C运算符优先级表:http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm

适用于1:

A1 /= ++B1 / --C1
  • C1将首先递减1到4
  • 然后
  • B1将增加1到6
  • B1(6)将被除以C1(4),其结果将为1
  • A1将被分配A1(5)和1的结果,即5

A1,B1和C1各自的结果分别为5,6和4。

2:

A2 += ++B2 % C2--
  • C2将首先标记为接近语句末尾递减,现在仍为5
  • 然后
  • B2将增加1到6
  • 将计算C2(5)除以C2(5)的余数,即1
  • A2将被赋予添加A2(5)和1的结果,其为6
  • C2将减少1到4

A2,B2和C2各自的结果分别为6,6和4。

请原谅我,如果我犯了任何错误,你可以随时用编译器检查这些错误。