老问题:关于X++和++X及其X=X++

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  --> 返回11
所以最后x+= x++ + x  -> 即 x+= 11, 即 x= x+11=16为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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值