Can';不理解x*=y+;1输出

Can';不理解x*=y+;1输出,c,C,我在理解代码的输出时遇到问题。请解释一下 #include<stdio.h> void main() { int x=2,y=5; x*=y+1; printf("%d",x); } #包括 void main() { int x=2,y=5; x*=y+1; printf(“%d”,x); } 输出为12。但根据我的理解,x*=y+1是x=x*y+1但根据运算符优先级,应先计算x*y,然后再计算添加1,因此应为10+1=11。但是它是12-谁能解释

我在理解代码的输出时遇到问题。请解释一下

#include<stdio.h>
void main()
{
     int x=2,y=5;
     x*=y+1;
     printf("%d",x);
}
#包括
void main()
{
int x=2,y=5;
x*=y+1;
printf(“%d”,x);
}

输出为12。但根据我的理解,
x*=y+1
x=x*y+1但根据运算符优先级,应先计算
x*y
,然后再计算
添加1
,因此应为10+1=11。但是它是12-谁能解释一下吗?

它将被评估为

x = x * (y + 1);
x = x * (y + 1);
所以


它被翻译成:
x=x*(y+1)


很明显,它打印出了12个。你的理解是正确的,但它是这样的:

x*=y+1;  =>  x = x * (y + 1);

现在应用BODMAS

这里发生的是编程中的操作顺序

是的,如果你有这个等式,
x*y+1
,它将是
(x*y)+1
,结果是11

但在编程中,
=
符号右侧的等式在被符号修改之前先被求解。在这个等式中,它是相乘的

所以
x*=y+1
实际上是
x=x*(y+1)
,也就是12

^在这种情况下,
星号(*)
将右侧的整个方程乘以
x
,然后将结果分配给
x

x*=y+1
x=x*(y+1)


运算符
+
的优先级高于运算符
*=

x*=y的工作原理类似于
x=x*y
这里
x*=(y+1)
x=x*(y+1)一样展开

从c中可以看到

加法/减法赋值的程序比简单的加法操作要低

所以这里

x*=y+1

+
先执行

所以

所以x=2*6

x = 12;

*=
和类似的运算符是一种类型的,即这些运算符不同于
*
或类似

从现在开始,这些运算符的优先级最低(高于
),因此将首先计算
y+1
,然后计算
*=
,并将结果分配给
x

,其计算结果为

所以


看一看,您就会明白为什么在这种情况下它会这样计算。

RU使用哪种编译器?使用GCC。它是
intmain(void)
,而不是
voidmain()
@Aashu:他使用的编译器并不重要。代码运行正常,没有编译器会出错。@KeithThompson:除非在Windows上,而且由于
printf()
末尾缺少换行符,所以可能就是在这里运行的。是的,它应该是
intmain(void)
,但MS允许
voidmain()
。这是一个重复的问题;困难在于找到(最好的)副本。谢谢你的解释+1这应该是答案。因为它解释了计算顺序的原因。BO=括号打开,D=除法,M=倍数,A=加法,S=减法。这是一个解决语句的命令。我怀疑编程语言是否每次都遵循bodmas。这有助于像我这样的初学者以一种简单的方式理解。
x = 12;
x = x * (y + 1);
x = 2 * (5 + 1) = 12