使用运算符计算数字
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
分配给 y
和 z
。由于赋值的值始终是赋值后其左侧的值,因此最终乘法 x *= y
将 x
乘以 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)
任何人都可以向我解释如何使用运算符计算此代码。
#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
分配给y
和z
。由于赋值的值始终是赋值后其左侧的值,因此最终乘法x *= y
将x
乘以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)