++ 和 -- 运算(转南老师)

当运算是自加或自减1的时候,C,C++提供了更为优化的运算操作符:++,--。

设整型变量 a,原值为 10。我们已经知道,要实现对其加1,可以有以下两种写法:

方法1: a = a +1;

方法2: a += 1;

我们还知道方法2比方法1好。现在还有方法3,并且是最好的方法。

++a,或者:a++;

也就是说,在只自加1的情况下,代码 a++ 或 ++a 可以生成最优化的汇编代码。

 

同样,自减1操作也有对应的操作符:--a 或 a--;

设a原值为10,则执行 --a 或者 a--后,a的值都为9。

 

现在来谈谈 ++a 和 a++ 有什么区别。

在C,C++语言里,++a 和 --a 称为前置运算(prefix),而 a++ 和 a--称为后置运算(postfix)。

如果仅仅是进行前置工或后置运算,那么结果是相同的,这我们已经在前面谈过,我们以++为例:设a为10,则无论是 ++a 或 a++,执行结果都是让a递增1,成为11。

但在有其它运算的复杂表达式中,前置++运算过程是:先加1,然后将已加1的变量参以其它运算。后置++的运算过程是:先用未加1的变量参以其它运算,然后再将该变量加1。

听起来有些绕,我们举些例子看,还是变量a,原来值为10:

例子1:

int b = ++a; //前置++

运算结果:a的值为11,b的值也为11。

计算过程解析:

先计算 ++a,结果a值为11;

然后再计算 b = a;结果b值也为11。

 

例子2:

int b = a++; //后置++

运算结果:a的值为11,但b的值为10。

计算过程解析:

先计算 b = a;因此,b的值是未加1之前的a,所以为10;

然后再计算 a++,a的值为11。

 

再举一复杂点的表达式:

int a = 10;

int c = 5;

 

int b = a++ + c;

执行这些代码,b值为15

 

倘若换成:

int a = 10;

int c = 5;

int b = ++a + c;

执行这些代码,b值为16;

想一想,为什么?

 

上在举的是++的例子,对于--操作,其计算顺序的规定一样。

 

++和--的确能加快运算速度,但它们在前置和后置运算上的微小区别,却很空易让你的代码变得不清晰。更为不好的是,不同的编译器可能会对比有不同的解释,比如VC和BC/CB会对同一代码会有不同的编译结果,造成代码的运行结果也不一样,这是我们应该尽量避免的。所以我们建议在代码尽量不要依赖于前置和后置运算的区别。(尽管它会让你的代码看上去很象“高手”所写)。

转载于:https://www.cnblogs.com/yfqh13/archive/2009/07/26/1531414.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值