一段有意思的问题代码
在c语言中()运算级高于 +
发现了一段代码在不同平台编译器运行出现的结果不同,请看如下代码
int main()
{
int a = 1;
int b = (++a) + (++a) + (++a);
printf("%d\n", b); //vs6.0-> 10. vs2008-> 12. xcode-> 9.
return 0;
}
此段代码在三个编译器下出现了不同的结果,难道编译器出问题了?
显然不是,这段代码是存在问题的,这是对运算符等级的不同执行顺序造成的。
在vs2008种先执行了三个括号中的内容,第一个括号后a=2,第二个后a=3,第三个后a=4,再算两个加号则b=12。
在vc++中,先算前两个括号后a=3,紧接着算第一个加号,则前两部分为3+3=6,紧接着算最后一个加号,a=4,再相加即6+4=10 。
在苹果的xcode中则是一个括号一个加号即2+3+4=9 。
自增自减运算符的复习
int main()
{
int a = 1;
int b = a--;
printf("%d\n", b); //1
printf("%d\n", a); //0
return 0;
}
int main()
{
int a = 1;
int b = --a;
printf("%d\n", b); //0
printf("%d\n", a); //0
return 0;
}
a-- 的逻辑是先将a拿来用再将a自减,如例一将a的值赋给b再将a自减为0。
--a 的逻辑是先将a自减,然后再做相应的操作如例二将a自减为1然后赋值给b。