重点:当X++单独使用时,就是没有其他符号参与运算,这时X做自增运算,而当X++与其他运算符一起参与运算时,这时的X++因为运算优先级低,所以是最后一个参与运算的,所以看下面代码
int x=;
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

C#核编之X++详解的更多相关文章

  1. 高并发网络编程之epoll详解(转载)

    高并发网络编程之epoll详解(转载) 转载自:https://blog.csdn.net/shenya1314/article/details/73691088 在linux 没有实现epoll事件 ...

  2. Linux应用编程之lseek详解

    Linux应用编程之lseek详解 1.lseek函数介绍 (1).文件指针:当我们要对一个文件进行读写时,一定要先打开这个文件,所以我们读写的所有文件都是动态文件.动态文件在内存中的形态就是文件流的 ...

  3. 集显也能硬件编码:Intel SDK && 各种音视频编解码学习详解

    http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...

  4. 【miscellaneous】各种音视频编解码学习详解

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  5. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

  6. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放 license收费等 ...

  7. Spring 声明式事务与编程式事务详解

    本文转载自IBM开发者论坛:https://developer.ibm.com/zh/articles/os-cn-spring-trans 根据自己的学习理解有所调整,用于学习备查. 事务管理对于企 ...

  8. 高并发网络编程之epoll详解

    select.poll和epoll的区别 在linux没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序.在大数据.高并发.集群等一些名词 ...

  9. Linux系统编程(36)—— socket编程之UDP详解

    UDP 是User DatagramProtocol的简称,中文名是用户数据报协议.UDP协议不面向连接,也不保证传输的可靠性,例如: 1.发送端的UDP协议层只管把应用层传来的数据封装成段交给IP协 ...

随机推荐

  1. Objective C - UIColor

    UIColor+Hex.h #import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *) colorWithHexStrin ...

  2. 转:Xshell显示找不到匹配的outgoing encryption算法怎么办

    原文出处:http://www.xshellcn.com/xsh_column/suanfa-bpp.html 由用户反应在使用xshell和xftp连接debian 7时出现找不到匹配的outgoi ...

  3. 【错排问题】【HDU2048】神、上帝以及老天爷

    神.上帝以及老天爷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  4. appium安装 For windows

    java sdk,android SDK,maven,genymotion全部已经安装完毕,只是安装appium 因为现在的appium(AppiumForWindows_1_4_13_1)需要自己重 ...

  5. Java之可变参数

    Java中支持可变参数 意思就是:参数的个数可以根据需要写,你可以写1个.2个.3个....他们都被保存到一个参数的数组中. 但是这些参有一些约束:他们必须是同类型的,比如都是String字符串类型. ...

  6. 从汇编看c++成员函数指针(三)

    前面的从汇编看c++中成员函数指针(一)和从汇编看c++成员函数指针(二)讨论的要么是单一类,要么是普通的多重继承,没有讨论虚拟继承,下面就来看一看,当引入虚拟继承之后,成员函数指针会有什么变化. 下 ...

  7. java poi 导入excel

    最近项目需要导入excel,网上有很多例子,自己整合记录下,兼容2003和2007,暂时没有添加图片处理功能. 所需jar包  http://pan.baidu.com/s/1sjPuWDR pack ...

  8. Python之路第十一天,高级(3)-Python操作 Memcached、Redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  9. Sql Server专题一:索引(上)

    写在前面的废话:索引问题已经是老生常谈的问题,虽然被经常说起,但作为我来说,至今没有用过索引(很可怕吧),我作为MS-BI实施工程师居然没用过索引,说话自然没底气.之前对索引的了解停留在“知道”的地步 ...

  10. OTCL的多继承

    Class Thing Class Animal Class Other -superclass {Animal Thing} Thing instproc init {args} { puts &q ...