加加减减(你真的懂++--吗) C#
目录
TOC \o "1-3" \h \z \u 自增量.
PAGEREF _Toc456268662 \h 1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360032000000
自增量
++a; 自加1
--a; 自减1
自增量的作用是将变量的值 加上1。
下面的2个示例演示了
变量++后 对变量值的影响。
|
int number++; Console.WriteLine(number); |
|
int ++number; Console.WriteLine(number); |
下面演示变量++后对表达式值的影响
|
//放在后面++ int int Console.WriteLine(number);//11 Console.WriteLine(result);//10+10=20 |
上面的代码相当于这样
//
// int result = 10 + number++;相当于
//
int result = 10 + number;
//
number++;
++放在左边
|
//++放在左边 int int Console.WriteLine(number);//11 Console.WriteLine(result);//10 |
//
// int result = 10 + ++number;相当于
//
++number;
// int result = 10 + number;
减减同上
--在左边
|
//后置-- int number--;//9 --number;//8 8-1 int 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
|
//--放在左面 int number--; --number; int 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。
示例1
|
int x = 9; int a = x++ + 11; x 在变量a中,x++出现一次,x自加1,此时x=10(9+1得来的) a 在a这个变量中,它的值是个表达式,x++出现了一次,它是后置的,所以它改变不了当前x的值(但能改变它后面的值,然而后面没有x变量),x =9 结果 a = 9 + 11 = 20
|
示例2
|
int x = 9; int b = ++x + 11;
x 在变量a中,x++出现一次,不论左++、右++结果都是对x的值+1,此时x=10(9+1得来的) a 在变量b值表达式中,++x是在左边的所以,x值会自增1并立即改变,此处的x = 10 (9+1得来的) 结果b = 10 + 11 = 21 |
示例3
|
int x = 9; int c = x++ + 11 + x++; x 以变量c的表达式中,x++出现了2次,所以x自加1了2次, x c 这要和示例1对比 示例1中的a = x++ + 11; 表达式中只有一个x++和一个11 x++不是加在自己身上的,而是加在别人身上的,示例1中的a后面没有x了,而本例是有x的,所以第一个x++自加后的值会变成后面的x++的值。 结果 c = 9 + 11 + 10 = 其实c的值和c = x++ |
放在一起
|
int x = 9; int a = x++ + 11; int b = ++x + 11; int c = x++ + 11 + x++; x 代码从上至下执行,x自加1 出现了4次,所以 a x++是右置的,所此值不变 a = 9+11 = 20 b 注意在算b的值前,先搞清楚此时的x的值是多少,是9呢还是10呢,很明显是10,应为a中的x已经自+1了一次,并且b中的++是在左边所以此处的x为11(10+1得到的),所以b的值 c 同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个小时终于搞明白了!
测试使用说明
请事先计算出结果,然后再运行对比结果。最下面有答案。
|
你真的能区分 如果你对下面的测试表示无聊、或者反感、或者对下面的测试感觉害怕,这说明你并不明白。有时候你能算对,那么是因为结果是知道答案前提下拼凑出来的。 |
测试1
|
staticvoid { int x = 7; int y = ++x + x--; Console.WriteLine("x Console.WriteLine("y Console.ReadKey(); } |
x
=
y
=
测试2
|
staticvoid { int x = 7; int y = ++x + --x; Console.WriteLine("x Console.WriteLine("y Console.ReadKey(); } |
x
=
y
=
测试3
|
staticvoid { int x = 5; int y = x++ + 11 + x-- + ++x + 3 + x--; Console.WriteLine("x Console.WriteLine("y Console.ReadKey(); } |
x
=
y
=
测试4
|
staticvoid { int x = 5; int y = (x++) + 3 + (--x) + (++x) + 5; Console.WriteLine("x Console.WriteLine("y
Console.ReadKey(); } |
x
=
y
=
答案
如果你对我给出的结果表示怀疑可以自已在vs中测试
测试1
x=7
y=8+8 =16
测试2
x=7
y=8+7=15
测试3
x = 5
y = 5+ 11 + 6+ 6 + 3
+ 6=37
测试4
tmp_x =6
x=6
y=5+3+5+6+5=24
代码调试专用
|
static void { int x int y //tmp_x =6 //x=6 //y=5+3+5+6+5=24 Console.WriteLine("x Console.WriteLine("y Console.ReadKey(); } |
加加减减(你真的懂++--吗) C#的更多相关文章
- C# DateTime 日期加1天 减一天 加一月 减一月 等方法
//今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-).ToShortDateString ...
- C# DateTime 日期加1天 减一天 加一月 减一月 等方法(转)
//今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-).ToShortDateString ...
- 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数
题目: 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数 首先,这道题肯定可以用动态规划来解, n为整数时,n的解为 n/2 的解加1 n为奇数时 ...
- var、符号运算、条件语句、三元(目)运算、自加和自减
1.var a=“hello world” a 这个变量是字符串了,对于里面的每一个字母来说,他是字节,里面有11个字节,(包括空格),字节总数用length表示 2.符号运算 + 字符串拼接 . ...
- OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加,连减,连除,连乘)
OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加.连减,连除,连乘) #import <UIKit/UIKit.h> @interface ViewControll ...
- .Net基础篇_学习笔记_第四天_加加减减
using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第四天_加加减减 { class Progr ...
- 【C++】自加、自减(补充)
// // main.cpp // [记录]自加.自减(补充) // // Created by T.P on 2018/3/7. // Copyright © 2018年 T.P. All righ ...
- setInterval对某个数值加加渐减
decrease_time = setInterval(decrease_opacity_val,10); function decrease_opacity_val(){ showID.style. ...
- “三次握手,四次挥手”你真的懂吗?TCP
“三次握手,四次挥手”你真的懂吗? mp.weixin.qq.com 来源:码农桃花源 解读:“拼多多”被薅的问题出在哪儿?损失将如何买单? 之前有推过一篇不错的干货<TCP之三次握手四次挥手 ...
随机推荐
- 转:json注入
现在大部分web采用ajax通信,数据表现为json格式,因此可以尝试进行json注入. json注入:根据实际情况进行注入.有的时候,可能是为了方便,有人会手动拼接下JSON,但是这种随手代码,却可 ...
- 下载好的AE模板怎么用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 下载好的AE模板怎么用_百度经验
- 找出N个数中最小的k个数问题(复杂度O(N*logk))
这是一个经典的算法题,下面给出的算法都在给定的数组基础上进行,好处时不用分配新的空间,坏处是会破坏原有的数组,可以自己分配新的空间以避免对原有数组的破坏. 思路一 先直接排序,再取排序后数据的前k个数 ...
- canvas之arcTo
arc与arcTo,从名字都能看出来相似.arcTo也是画曲线的方法,而且他画出的曲线也是正圆的一段弧线.但他的参数和arc简直是不共戴天~ ctx.arcTo(x1,y1,x2,y2,radius) ...
- HDU 4584 Building bridges (水题)
Building bridges Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- JavaScript 开发的45个技巧2
http://mp.weixin.qq.com/s?src=3×tamp=1474692926&ver=1&signature=agI3W5rKmVC6GgbdTXh ...
- google的开源项目总结
转自http://www.feng5166.com/blog/424.html google的开源项目值得我们一用的,这些项目很有意义,甚至可以直接用在我们自己的工作上!学习编程的的一个比较好的方式就 ...
- 《Windows驱动开发技术详解》之StartIO例程
内容中包含 base64string 图片造成字符过多,拒绝显示
- 网络工程师岗位基础面试题【适用于CCNA/CCNP基础】
网络工程师岗位基础面试题[适用于CCNA/CCNP基础] 1: 交换机是如何转发数据包的?交换机通过学习数据帧中的源MAC地址生成交换机的MAC地址表,交换机查看数据帧的目标MAC地址,根据MAC地址 ...
- 流畅的python第十五章上下文管理器和else块学习记录
with 语句和上下文管理器for.while 和 try 语句的 else 子句 with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文.这么做能避免错误并减少样板代码, ...