使用运算符计算数字

Calculating numbers with 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,

*= 将左操作数乘以右操作数并将结果赋值给左。

x *= y = z = 4; 

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

x *= y += z; 

z 与 y 相加,结果赋给 y,然后 x 乘以 y,结果赋给 x。

x*=3 表示 x=x*3 => x=2*3=6

x*=(3+2) 表示 x=x*(3+2) => x=6*5=30

x*=y=z=4表示z=4,然后y=4,然后x=x*y => x=30*4=120

x*=y+=z 表示 y=y+z 然后 x=x*y => y=4+4=8 然后 x=120*8=960.

  • 前两个赋值很简单:x 乘以 3 得到 6,然后乘以 (3+2) 得到 30
  • 第三个作业具有一系列作业,4 分配给 yz。由于赋值的值始终是赋值后其左侧的值,因此最终乘法 x *= yx 乘以 4,得到 120.
  • 最后一行是最棘手的,因为它有两个副作用。首先,计算 y += z,生成 8。之后 x 乘以 8,产生最终值 960

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

运算符后跟等号表示运算符作用于左边的变量和右边的变量,然后对左边的变量进行赋值。您还遵循优先操作。我在下面扩展了意思。

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)