有人可以向我解释如何使用运算符计算此代码。
#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,
答案 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
分配给y
和z
。由于赋值的值始终是赋值后左侧的值,因此最终乘法x *= y
会将x
乘以4
,为您提供120
。y += z
,生成8
。之后x
乘以8
,产生最终值960
。请注意,在最后一行x
乘以8
,这可能是也可能不是执行乘法时y
的值。