x++ ,x--,++x,--x 理清了,就很简单,原理都是一样的

对新手来说 ,算法真的很重要,可以 有的时候看起来会很乱, 就像这样

++x,--x,x++,x--

多算几遍就很清楚了

先算一下 x--

 class Program
    {
     
  static void F(int x, int y = -1, int z = -2)
        {
            Console.WriteLine("x={0},y={1},z={2}", x, y, z);
        }
        static void Main(string[] args)
        {
            int i = 0;

            F(i--, i--, i--);

            F(z: i--, x: i--);
            Console.ReadLine();
        }

Console 输出地  x ,y,z

在Main方法里面有具体算法 先来分析一下

 

int i =0 ;给 i 赋值为 1

F()方法里分别是 i--,i--,i-- 看起来很头疼 这就是 前缀和后缀的区别, 因为是 i-- ,我们就要先 引用 后递减 所以第一个 i-- 的值就为 0 也就是 x=0 ,先引用,后递减,

第二个 i要在原先的基础上 -1,所以 到第二个 i--的时候  仍然要 先引用 直接引用 i的值 -1 所以 y=-1,然后 i仍然要递减,

 

这时候i的值 已经变成了 -2,z=-2,先引用后递减 这时候 i 依然要 递减  i =-3了

在 下一个F();里 z 先引用 i=-3的值 在递减 x也就是i =-3-1的值 x=-4 ,y没有变,在这个方法里所以直接引用

 

那我们来整理一下  输出的结果应该是  x=0,y=-1,z=-2

                                                x= -4,y=-1,z=-3

再看一下控制台的输出吧

 

  

结果是对的  x++ 也是同样的道理,先引用 x的值 x=0,然后要在引用完之后 递增,等到下一次计算的时候 x的值就是递增完的值了 ,也就是 1

 

 ++x 的算法

 

static void F(int x, int y = -1, int z = -2)
        {
            Console.WriteLine("x={0},y={1},z={2}", x, y, z);
        }
        static void Main(string[] args)
        {
            int i = 0;

            F(++i, ++i, ++i);

            F(z: ++i, x: ++i);
            Console.ReadLine();
        }
        
    ++i,因为是前缀,就要先运算后引用,

i=0 ,先递增 x=++i=1 这时候 i的值为1 然后再加一在输出这时候y=2,z=3

第二个F()方法里面 的时候  i的值为 3, z 在引用之前要先递增 这时候  z =4 x =5  y 依然没有加入算法 y =-1

整理一下,输出地 结果应该是  

x =1 ,y=2,z=3

x=5 ,y=-1,z=4 

 

 看一下控制台的结果

 

 

结果是对的,

这就是 ++x 和 x++ 的区别 如果运算符在前面的 x的值就是要先运算,后引用,如果运算符在后面的话 ,就是要先引用x的值,然后再递增,参与下一轮运算。

希望对新手有所帮助,我也是新手

posted @ 2010-07-10 14:35  Ryan Lee  阅读(1061)  评论(0编辑  收藏  举报