加加减减都不对(一减一不是零 打一字字左右结构)

++a; 自加1&
--a; 自减1
自增量的作用是将变量的值 加上1。
下面的2个示例演示了?
变量++后 对变量值的影响。
number = 10;
Console.WriteLine(number);
//number = 11
number = 10;
Console.WriteLine(number);
//number = 11
下面演示变量++后对表达式值的影响
?number++ 放在表达式中则表示 先使用number这个值,然后再把number的值+1
result的值是 10 +11呢 还是10 + 10呢?
//放在后面++
number = 10;
result = 10 + number++;
Console.WriteLine(number);//11
Console.WriteLine(result);//10+10=20
上面的代码相当于这样
// int result = 10 + number++;相当于
int result = 10 +
//++放在左边
number = 10;
result = 10 + ++number;
Console.WriteLine(number);//11
Console.WriteLine(result);//10
// int result = 10 + ++相当于
//? int result = 10 +
number = 10;
number--;//9
--//8????? 8-1
result = 10 + --//10+7
Console.WriteLine(number);//10-3
Console.WriteLine(result);//17
Console.ReadKey();
number的值
这里的number不论-—放在它的左边还是右边,结果都是将number的值自身减去1,这里出现了3次--,所以number的值 = 10 -3 = 7
result的值
在计算到--number时,number已经自身减去2了(number = 8),而--是放在number的左边的,使用之前要减1,所以结果为result = 10 + 7 =17
number的值
这里的number不论--放在它的左边还是右边,结果都是将number的值自身减去1,这里出现了3次--,所以number的值 = 10 -3 = 7
result的值
result在使用number之前number的值已经改变了,(减了2次1),现在的number值为8。表达式中的number--由于是后置—-所以这个number的值不变依然是上面的8,
所以result = 10 + 8 =18
//--放在左面
number = 10;
result = 10 + number--;
Console.WriteLine(number);//10-3
Console.WriteLine(result);//10+8
Console.ReadKey();
放在左边和放在右边对表达式的值影响
++和-- 一个是自增1、一个是自减1,原理一样这里只解释++对表达式的影响。
在表达式中(var=1):
1.++放在左边的(y=++var),会立即对当前的变量值 +1。这里的var就等于2了
2.++放在右边的面的(y=var++),不会对当前值有影响(即此处var=1)但如果后面
仍然有var变量时,则会对后面的var值+1。
int x = 9;
int a = x++ + 11;
在变量a中,x++出现一次,x自加1,此时x=10(9+1得来的)
在a这个变量中,它的值是个表达式,x++出现了一次,它是后置的,所以它改变不了当前x的值(但能改变它后面的值,然而后面没有x变量),x =9
结果 a = 9 + 11 = 20
int x = 9;
int b = ++x + 11;
在变量a中,x++出现一次,不论左++、右++结果都是对x的值+1,此时x=10(9+1得来的)
在变量b值表达式中,++x是在左边的所以,x值会自增1并立即改变,此处的x = 10 (9+1得来的)
结果b = 10 + 11 = 21
int x = 9;
int c = x++ + 11 + x++;
?? 以变量c的表达式中,x++出现了2次,所以x自加1了2次,
= 9 + 1 + 1 = 11
这要和示例1对比
示例1中的a = x++ + 11; 表达式中只有一个x++和一个11
x++不是加在自己身上的,而是加在别人身上的,示例1中的a后面没有x了,而本例是有x的,所以第一个x++自加后的值会变成后面的x++的值。
结果 c = 9 + 11 + 10 =
其实c的值和c = x++
+ 11 + x;是一样的
int x = 9;
int a = x++ + 11;
int b = ++x + 11;
int c = x++ + 11 + x++;
?代码从上至下执行,x自加1 出现了4次,所以
?x++是右置的,所此值不变 a = 9+11 = 20
?注意在算b的值前,先搞清楚此时的x的值是多少,是9呢还是10呢,很明显是10,应为a中的x已经自+1了一次,并且b中的++是在左边所以此处的x为11(10+1得到的),所以b的值
b = 11 + 11 = 22
同b的求值一样,在算到x++之前,x的值已经自增了2次这时x=11,
再来算c中的表达式x++ + 11 + x++ = 11 + 11 + 12 = 34
如果你真的会,会对下面的测试非常感到自信,并且跃跃欲试,那么下面就来测试吧。
下面有5个测试如果你都做对了说明你真的明白了。
我看过很多的关于 ++放在左边和放在右边的区别,但并不完全明白主要有以下3点
1.++var 先加后用
2.var++ 先用后加
3.不论 左++ 、
右++ 结果都是对var的自身+1
我说不明白是因为当我对很长一段 ++ -- 计算时,结果算出来有时对有时不对。
这个问题甚少放了几个月了没解决,也许有1年了,昨天又花了6个小时终于搞明白了!
测试使用说明
请事先计算出结果,然后再运行对比结果。最下面有答案。
staticvoid
Main(string[] args)
??? int x = 7;
??? int y = ++x + x--;
??? Console.WriteLine(&x
= {0}&, x);
??? Console.WriteLine(&y
= {0}&, y);
??? Console.ReadKey();
staticvoid
Main(string[] args)
??? int x = 7;
??? int y = ++x + --x;
??? Console.WriteLine(&x
= {0}&, x);
??? Console.WriteLine(&y
= {0}&, y);
??? Console.ReadKey();
staticvoid
Main(string[] args)
??? int x = 5;
??? int y = x++ + 11 + x-- + ++x + 3 + x--;
??? Console.WriteLine(&x
= {0}&, x);
??? Console.WriteLine(&y
= {0}&, y);
??? Console.ReadKey();
staticvoid
Main(string[] args)
??? int x = 5;
??? int y = (x++) + 3 + (--x) + (++x) + 5;
??? Console.WriteLine(&x
= {0}&, x);
??? Console.WriteLine(&y
= {0}&, y);
??????????????? ??????????????????
??? Console.ReadKey();
如果你对我给出的结果表示怀疑可以自已在vs中测试
y=8+7=15?? ???????
y = 5+ 11 + 6+?? 6 + 3
y=5+3+5+6+5=24
代码调试专用
??? ????static void
Main(string[] args)
??????????? int x
??????????? int y
= (x++) + 3 + (--x) + (++x) + 5;
??????????? //tmp_x =6
??????????? //x=6
??????????? //y=5+3+5+6+5=24
??????????? Console.WriteLine(&x
= {0}&, x);
??????????? Console.WriteLine(&y
= {0}&, y);
??????????? Console.ReadKey();
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!休闲娱乐生活服务其他类别扫扫有惊喜
热门新闻更多
实时热点榜单热门视频发现好货
阅读下一篇视频推荐& 文章列表页
加加减减向“过劳肥”说Bye Bye!--相关文章}

我要回帖

更多关于 一减一不是零 打一字 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信