前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#核编之X++详解

C#核编之X++详解

作者头像
郑小超.
发布2018-01-24 15:50:42
8600
发布2018-01-24 15:50:42
举报
文章被收录于专栏:GreenLeavesGreenLeaves

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

代码语言:javascript
复制
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++

题目如下:

代码语言:js
复制
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

现在修改一下代码,如下:

代码语言:js
复制
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.

下面这道题想必大家都知道答案了。

代码语言:js
复制
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.

那么下面应该返回多少呢?

代码语言:js
复制
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.再看看上面原理,自己理解下。

代码语言:js
复制
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++呢?如下:

代码语言:js
复制
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吧。

代码语言:js
复制
static void Main(string[] args)
{
   int x = 5;            
   ++x;
   Console.WriteLine("x=" + x.ToString());
}

现在x=6.

那么加上等号呢?

代码语言:js
复制
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等于多少呢?

代码语言:js
复制
static void Main(string[] args)
{
   int x = 5;            
   x += x++;
   Console.WriteLine("x=" + x.ToString());
}

正确答案是10.

3. x += x + x++ VS x += x++ + x

http://blogs.msdn.com/b/lucabol/archive/2004/08/31/223580.aspx

再看看下面的代码,

代码语言:js
复制
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. 这下同学们明白了。那下面的答案应该是多少呢?

代码语言:js
复制
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

见下面代码:

代码语言:js
复制
static void Main(string[] args)
{
   int x = 5;            
   x = x + ++x;
   Console.WriteLine("x=" + x.ToString());
   Console.Read();
}

结果为11

代码语言:js
复制
static void Main(string[] args)
{
   int x = 5;            
   x = ++x + x;
   Console.WriteLine("x=" + x.ToString());
   Console.Read();
}

结果为12

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档