我在理解代码输出时遇到问题。任何解释请...
#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 - 有人可以解释一下吗?
答案 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 + 1
是x = 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)