zoukankan      html  css  js  c++  java
  • C#核编之X++详解

    重点:当X++单独使用时,就是没有其他符号参与运算,这时X做自增运算,而当X++与其他运算符一起参与运算时,这时的X++因为运算优先级低,所以是最后一个参与运算的,所以看下面代码
    int x=5;
    x=x++;//这时的运算顺序是这样的,从左往右运算,先做x=x  所以x=5,然后因为x++是先返回旧的值,在自己做递增运算,返回的x和它自己本身不是一个引用,所以=右边的x与x做++操作之后的x不是同
    //一个实例 所以这里的x=5
    x++;//而这里的x拿的值则是上面返回x,而这里面的x因为没有其他的运算符号参与运算,所以无法返回旧值,所以只能老老实实的做加1运算 所以这里的x=6 Console.WriteLine("{0}",x);//输出:6
     
     
    1. X++
    题目如下:
    static void Main(string[] args)
    {
       int x = 5;
       int y = 10;          
       y += x++;
       Console.WriteLine("x=" + x.ToString() + " y=" + y.ToString());
    }
    答案是多少呢?
    x=6,y=15
     
    现在修改一下代码,如下:
    static void Main(string[] args)
    {
       int x = 5;
       int y = 10;          
       x++;
       y += x;
       Console.WriteLine("x=" + x.ToString() + " y=" + y.ToString());
    }
    答案变成了x=6,y=16
     
    为什么呢?
    其实记住基本原理就可以无敌了:
    X++ will  return its old value and then increment the value.
     
    下面这道题想必大家都知道答案了。
    static void Main(string[] args)
    {
       int x = 5;
       int y = 10;          
       x = x++;
       Console.WriteLine("x=" + x.ToString() + " y=" + y.ToString());
    }
    根据上面原则,x++增加x的值,但返回原来的值,所以x=5.
    那么下面应该返回多少呢?
    static void Main(string[] args)
    {
       int x = 5;
       int y = 10;          
       x = x++;
       x = x++;
       Console.WriteLine("x=" + x.ToString() + " y=" + y.ToString());
       Console.Read();
    }
    有人有点晕了吧?是不是应该等于6呢?实际答案是x=5.再看看上面原理,自己理解下。
    static void Main(string[] args)
    {
       int x = 5;
       int y = 10;          
       x++;
       Console.WriteLine("x=" + x.ToString() + " y=" + y.ToString());
    }
    这个x等于多少呢?因为x++会加1,所以x=6.
    再加多一行x++呢?如下:
    static void Main(string[] args)
    {
       int x = 5;
       int y = 10;          
       x++;
       x++;
       Console.WriteLine("x=" + x.ToString() + " y=" + y.ToString());
    }
    x就乖乖递增了,现在等于7.
     
    2. ++X
    现在变换一下,试试++x吧。
    static void Main(string[] args)
    {
       int x = 5;            
       ++x;
       Console.WriteLine("x=" + x.ToString());
    }
    现在x=6.
    那么加上等号呢?
    static void Main(string[] args)
    {
       int x = 5;            
       x = ++x;
       Console.WriteLine("x=" + x.ToString());
    }
    这次不是5了哦。x还是等于6.
    为什么呢?
    ++X first increment the value, then return this value. 所以++X会返回新值。
     
    现在考考大家,下面的x等于多少呢?
    static void Main(string[] args)
    {
       int x = 5;            
       x += x++;
       Console.WriteLine("x=" + x.ToString());
    }
    正确答案是10.
     
    3. x += x + x++ VS x += x++ + x
    再看看下面的代码,
    static void Main(string[] args)
    {
       int x = 5;            
       x += x + x++;
       Console.WriteLine("x=" + x.ToString());
    }
    答案是15还是16呢?
    相信有不少同学认为是16,实际上正确答案是15.
    别看x+= x+x++很复杂,有点绕,其实它等于x += x + x. 这下同学们明白了。那下面的答案应该是多少呢?
    static void Main(string[] args)
    {
       int x = 5;            
       x = x++ + x;
       Console.WriteLine("x=" + x.ToString());
    }
    大家说那还不是一样么?x=x+x啊,还是15.这次又错啦。答案是16哦。
    傻眼了吧?到底是怎么回事呢?绕来绕去绕晕了啊。
    我们来仔细解析一下吧:
    x = x + x++;
    1. x=(x) + x++ -->根据从左到右的运算法则。第一个x即用括号括起来的x先进行运算,x本来为5,所以x=5 + x++
    2. x= 5 + (x)++ -->这里括起来的x为5, 所以x=5+ (5)++
    3. x= 5 + (5)++ -->经过x++运算,x变为6,但是x++返回旧值,还是5,所以x= 5+5
    4. x= 5+5 --> 返回10
    5. x += x+ x++ --> 即 x+= 10, 即 x= x+10=15
    所以这里x=15.
     
    x=x++ + x;
    1. x=(x)++ + x --> x= (5)++ + x
    2. x = (5++) + x --> x = 6 + x
    所以最后x+= x++ + x为16.
     
    4. x = x + ++x VS x = ++x + x
    见下面代码:
    static void Main(string[] args)
    {
       int x = 5;            
       x = x + ++x;
       Console.WriteLine("x=" + x.ToString());
       Console.Read();
    }
    结果为11
    static void Main(string[] args)
    {
       int x = 5;            
       x = ++x + x;
       Console.WriteLine("x=" + x.ToString());
       Console.Read();
    }
    结果为12
  • 相关阅读:
    Python中xlrd和xlwt模块读写Excel的方法
    本地安装apk后直接打开,按下Home键再重新打开,然后按下返回键时页面展示错误的处理方法
    Celery在Django中的简单应用
    drf之认证、权限、频率
    drf分页器
    drf之请求、响应、视图
    Django序列化器的简单使用
    Django之URL反向解析
    两大grafana实用插件快速监控kubernetes
    JenkinsPipeline语法概要
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6114474.html
Copyright © 2011-2022 走看看