无法理解x * = y + 1输出

时间:2014-08-01 06:02:42

标签: c

我在理解代码输出时遇到问题。任何解释请...

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

输出为12.但根据我的理解,x*=y+1;x=x*y+1;,但根据运算符优先级x*y应评估后跟adding 1,因此它应为10 + 1 = 11。但它是12 - 有人可以解释一下吗?

9 个答案:

答案 0 :(得分:13)

它将被评估为

x = x * (y + 1);

所以

x = 2 * ( 5 + 1 )
x = 12

答案 1 :(得分:10)

这里发生的是如何在编程中发生操作顺序。

是的,如果你要使用这个等式x*y+1,它将是(x * y ) + 1并导致11。

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

所以x *= y + 1实际上是x = x * ( y + 1 ),这将是12 ^在这种情况下,asterisk(*)将右侧的整个等式乘以x,然后将 结果分配给x

答案 2 :(得分:2)

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

非常明显地打印出12。

答案 3 :(得分:1)

您的理解是正确的,但它是这样的:

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

现在应用 BODMAS

答案 4 :(得分:1)

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

运营商+的优先级高于运营商*=

答案 5 :(得分:1)

x*=y;就像x=x*y;一样 此处x*=(y+1)正在扩展,如x = x * (y + 1);

答案 6 :(得分:0)

此处来自c中的operator procedure,您可以看到

加法/减法作业的程序低于添加操作。

所以这里

X * = Y + 1;

+先执行。

所以

x = x * (6)

所以x = 2 * 6

x = 12;

答案 7 :(得分:0)

*=和类似的C assignment operators类型,即这些运算符与*等不同。

现在来自C operator precedence,这些运算符的优先级最低(高于,),因此将首先评估y + 1,然后评估*=并分配结果到x

答案 8 :(得分:0)

评估为

x = x * (y + 1);

所以

x = 2 * (5 + 1) = 12

看一下Operators order,您会看到为什么在这种情况下会对此进行评估。