为何同样的赋值计算,不同软件结果不一样
如题一个是visual studio 2019 professional
另一个是DEV-C++ 5.11
{:10_254:} #include <stdio.h>
int main()
{
int a = 2;
a = (a = a*2)*6*(a = a+3);
printf("%d\n", a);
return 0;
} {:10_266:} 本帖最后由 yinqingliu 于 2020-11-11 10:06 编辑
file:///D:/%E9%97%AE%E9%A2%98/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202020-11-10%20215857.png
这个网页版的编译器也是294 本帖最后由 jitianmoshen 于 2020-11-11 10:12 编辑
6两边都是乘号,两个括号的运算顺序是同级的。但是C标准并没有规定应该先算左边或是右边,这是由每个编译器自行决定的。比如a = 2; b = (a ++* 3) + (a ++ * 2), 先算a++ *3 或先算a++ *2结果是不一样的。
应该是这个问题{:10_257:} jitianmoshen 发表于 2020-11-11 10:10
6两边都是乘号,两个括号的运算顺序是同级的。但是C标准并没有规定应该先算左边或是右边,这是由每个编译器 ...
感动,终于有个人回复我了{:10_266:}{:10_254:},谢谢你 jitianmoshen 发表于 2020-11-11 10:10
6两边都是乘号,两个括号的运算顺序是同级的。但是C标准并没有规定应该先算左边或是右边,这是由每个编译器 ...
先算右边是300或600吧,可它是7*6*7呀,好像是先算左边使a=4,然后再算右边使a=7,结果a=7,然后计算a=7*6*7=294DEV-C++是4*6*7=168 {:10_254:} yinqingliu 发表于 2020-11-11 10:48
先算右边是300或600吧,可它是7*6*7呀,好像是先算左边使a=4,然后再算右边使a=7,结果a=7,然后计算a=7* ...
我用Linux算的也是294,但我感觉dev的比较合理啊,算完后面的括号把前面的括号里的值也覆盖了就有点难受
页:
[1]