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