自增和自减运算符

自增和自减运算符

  在C语言中有许多运算符,逻辑运算,赋值运算,关系运算……,其中最难理解的莫过于自增(++)和自减(--)运算了。

  自增(自减)有两种方式,下面分别进行分析。

  1、++(--)在前。++i(--i)其用法是在整个表达式运算之前先进行自增(自减)运算,然后再进行表达式运算。例如进行如下计算:

       intx ,y;

       x= 8;

       y= ++x;

运行结果为 :x = 9 ,y = 9 。x在给y赋值之前,先进行了自增运算x =x +1 = 9 ,然后将x的值赋给y , y = x =9,所以y = 9 。

  2、++(--)在后。i++(i--)其用法是在整个表达式运算结束以后再进行自增或自减运算,例如进行如下运算:

       intx ,y;

       x= 8;

       y= ++;

运行结果为:x = 9 ,y = 8 。x先给y赋值,y = x = 8 ,然后再进行自增运算x = x + 1 = 9 。所以y = 8 , x = 9 。

  下面来进行稍微复杂的运算。

       intx , y , z ;

       x= 8 ;

       y= (++x) + (x++) + (++x);     Ⅰ

       z= (--x) + (x--) + (++x);     Ⅱ

其运行结果为:x = 10 ,y = 30 ,z =33 。

我们逐步进行分析。首先x赋值为8,x = 8 。然后看Ⅰ步:++x →x = x +1 = 9 → x++ → x = x = 9 → ++x → x = x + 1 = 9+1 = 10 。所以在计算y 之前,x 的值是 10 。y = x + x + x = 10+10+10 = 30 → x++ →x = x + 1= 11 。所以Ⅰ计算结果为y = 30 ,x = 11 。

再看Ⅱ步:--x → x = x -1 =11-1 =10 → x-- → x = x =10 → ++x → x= x + 1 = 11 。所以在计算z之前。x 的值是11 。z = x + x + x = 11 +11 +11 = 33 → x-- → x = x – 1 =10 。所以Ⅱ的结果为 z = 33 ,x = 10 。

  通过以上计算我们可以看出自增和自减的用法以及++(--)在前和在后的区别。但是以上结果均是在Windows系统下编译计算出的,在Linux系统下编译出的结果会不会也是这样呢?对此,我们在Red Hat 32位Linux系统下输入相同的代码(只给出部分语句,其余均省略):

int x , y , z ;

       x= 8 ;

       y= (++x) + (x++) + (++x);     Ⅰ

       z= (--x) + (x--) + (++x);     Ⅱ

通过编译我们发现,结果为  :x = 10 ,y = 28 ,z = 31 。

其结果与Windows的不同,对此,我们作如下分析:

Ⅰ ++x → x = 9 → x++ → x = 9下面一步与Windows系统不同,Linux系统先进行了加法计算,即y = x + x = 9 + 9 =18 。→ ++x →x = 10 → y =18 + x = 18 + 10 =28 → x++ → x = 11 。所以Ⅰ结果为:x = 11 ,y = 28 。

Ⅱ --x→ x =10 → x-- →x = 10,同样Linux先进行加法运算z = x + x =10 +10 = 20 。→ ++x → x = 11 → z = 20 + 11 = 31 → x-- → x = 10 。所以最终结果为 :x = 10 ,z = 31 。

  通过比较我们发现,自增和自减运算的通常法一般只适用于Windows系统,对于Linux系统,自增和自减运算在某些情况下并不遵循一般规则。不知道这种情况是系统的BUG,还是其内部的算法,这有待于继续研究。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值