#include "stdio.h" main() { int a=3; a+=a-=a*a; printf("%d\n",a); } 为什么结果为-12 求详细的解释

急!!!

a+=a-=a*a; 首先搞清楚是怎么运算的
+=,-=为右结合,*的优先级最高
所以先运行*运算,然后再运行-=运算,a += (a -= (a*a))也就是 a = a - (a*a); 此时a的值变为了-6;
再运行 a += a; 即 a = a+a; 结果就为-12啦
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-07
首先,先理解+=和-=的运算规则,如a+=a,其等价表示为a = a + a,-=同理;
然后,理解=的运算规则,如a = b = c,是先将c赋值给b然后再赋值给a的;
最后,假设一个中间变量b来理解算式, a+=a-=a*a -->
b = a - a * a ; a += b -->
b = -6 ; a += b -->
a = -12
第2个回答  2012-01-07
a=3;
a+=a-=a*a;
a+=(a=a-(a*a));//此时a已经被赋值为-6
a=a+a;//a=-12;
第3个回答  2012-01-07
可能是赋值的时候出了问题追问

程序没问题的!问结果为什么是-12?

第4个回答  2012-01-07
a+=a-=a*a
a+=a-=9 a=a-9=-6
a+=-6 a=a+(-6)=(-6)+(-6)=-12
从右往左算

...main() { int a=3; a+=a-=a*a; printf("%d\\n",a); } 为什么结果为...
+=,-=为右结合,*的优先级最高 所以先运行*运算,然后再运行-=运算,a += (a -= (a*a))也就是 a = a - (a*a); 此时a的值变为了-6;再运行 a += a; 即 a = a+a; 结果就为-12啦

...main() {int a=12; a+=a-=a*a; printf("a=%d\\n",a); }
再执行a+=a,即a=a+a=(-132)+(-132)=-264 输出a的值,输出a=-264

...{ int a=3; a+=a-=a*a=a; printf("%d",a); } 运行过不了,怎么回事...
具体是在a*a=a这里出错了 原因分析:整个表达式是由右向左解释的,这是由赋值运算符的特性确定的。所以表达式等价于:a+=( a-= ( a*a=a ) );而a*a是一个右值,而非左值(就是说这个表达式只能放在等号右边,而不能放在左边)所以出现错误,无法通过编译 ...

#include<stdio.h> void main() { int a=3; a+=(a<1)? a:1; printf...
很明显,当对条件 a < 1 进行判断时,因为a = 3 因此判断结果为false ,将执行 :号后面的表达式---也就是1---也就是a += 1, 因为a =3 因此 a += 1 的最终结果为4 。 明白了吗? :)

C语言问题: #include <stdio.h> int main() { int a=3,
a+=b,代表给a赋值为(a+b),-=同理,同时这俩运算符平级。所以顺序为首先a+=a,此时a=2a;然后a-=a,此时=0;然后c=a=0

设有int a=3,a+=a-=a*a的值是,要详细过程 谢谢
a-=a*a相当于 a=a-(a*a)=-6a+=-6相当于 a=a-6=-6-6=-12所以最后结果是-12这个题是从后面倒着算回来,每一步算出来值都赋给后一项的计算。详情可见C语言的赋值表达式 本回答由提问者推荐 举报| 评论 32 3 coolzhixu123 采纳率:67% 来自:芝麻团 擅长: 数学 考研 高考 环境学 ...

main() { int a=3; printf("%d\\n",(a+a-=a*a)); }
这是非法的:a+a这个表达式不能做左值,应该为:printf("%d\\n",(a+(a-=a*a)));

#include<stdio.h> int main() { int a=023; printf("%d\\n",--a...
以0开头的数值是8进制数值 023 (8进制) = 19 (10进制)

int(a)=3; a的值是多少?
a=-12。赋值语句,从右到左依次运行:那么:int a=3;a+=a-=a*a;相当于:1.a-=a*a;2.a+=a;相当于:1.a=a-a*a;2.a=a+a;由于a初始化为3:1.a=a-a*a=3-3*3=-6;2.a=a+a=-6+(-6)==-12;

#include<stdio.h> main() {int a=9; a+=a-=a+a; printf("%d\\n",a...
int a=9;\/\/定义一个整形类型的树a=9;a+=a-=a+a; \/\/从右往左看,相当于a=a-(a+a)=-9和a=a+a=-18 printf("%d\\n",a); \/\/即最后为-18 还有。。。注意main函数的返回类型

相似回答
大家正在搜