用运算符计算数字

时间:2016-02-10 19:43:32

标签: c operators

有人可以向我解释如何使用运算符计算此代码。

  #include <stdio.h>

  int main(void)
  {

   int x = 2, y , z;

   x *= 3;
   printf("%d\n", x);
   x = x * (3 + 2);
   printf("%d\n", x);
   x *= y = z = 4;
   printf("%d\n", x);
   x *= y += z;
   printf("%d %d %d\n", x, y, z);

   return 0;
  }

结果,我得到了以下输出:

  

6,
  30,
  120,
  960,8,4,

4 个答案:

答案 0 :(得分:3)

运算符后跟等号表示运算符应用于左侧的变量和右侧的变量,然后是左侧变量的赋值。您还遵循优先操作。我扩展了下面的含义。

x *= 3;

相同
x = x * 3;  // 6 = 2*3

括号显示优先顺序

x = x * (3+2) // x was 6 from the previous line

这是

x = x * 5 // which gives 30

x *= y = z = 4;

装置

z = 4;
y = z; //which is 4
x = x *y; // which is 120 = 30 *4

x *= y += z;

装置

y = y + z ; // y = 4 + 4 (8)
x = x * y; // x = 120 * 8 (960)

答案 1 :(得分:2)

*=将左操作数乘以右操作数,并将结果分配给左边。

x *= y = z = 4; 

从右到左工作,将4分配给z和y,然后将x乘以4。

x *= y += z; 

z添加到y,结果分配给y,然后x乘以y,结果分配给x。

答案 2 :(得分:2)

x*=3表示x=x*3 =&gt; x=2*3=6

x*=(3+2)表示x=x*(3+2) =&gt; x=6*5=30

x*=y=z=4表示z=4,然后是y=4,然后是x=x*y =&gt; x=30*4=120

x*=y+=z表示y=y+z,然后x=x*y =&gt; y=4+4=8然后x=120*8=960

答案 3 :(得分:1)

  • 前两个分配非常简单:将x乘以3会为您提供6,然后按(3+2)为您提供30
  • 第三项作业包含一系列作业,4分配给yz。由于赋值的值始终是赋值后左侧的值,因此最终乘法x *= y会将x乘以4,为您提供120
  • 最后一行是最棘手的,因为它有两个副作用。首先,评估y += z,生成8。之后x乘以8,产生最终值960

请注意,在最后一行x乘以8,这可能是也可能不是执行乘法时y的值。