执行计算后确定每个变量的值。执行前所有变量的值都为5。
A1/=++B1/--C1
A2+=++B2%C2--
请告诉我这项工作是怎样的
答案 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
A1,B1和C1各自的结果分别为5,6和4。
2:
A2 += ++B2 % C2--
A2,B2和C2各自的结果分别为6,6和4。
请原谅我,如果我犯了任何错误,你可以随时用编译器检查这些错误。