因运算级出现的问题代码思考

一段有意思的问题代码

在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







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值