加加减减(你真的懂++--吗) C#

目录

?TOC \o "1-3" \h \z \u 自增量.
PAGEREF _Toc456268662 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360032000000

++放在右边.
PAGEREF _Toc456268663 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360033000000

++放在左边.
PAGEREF _Toc456268664 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360034000000

--在左边.
PAGEREF _Toc456268665 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360035000000

--在右边.
PAGEREF _Toc456268666 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360036000000

++或者-- 放在左边和放在右边对表达式的值影响.
PAGEREF _Toc456268667 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360037000000

示例1
PAGEREF _Toc456268668 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360038000000

示例2
PAGEREF _Toc456268669 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600360039000000

示例3
PAGEREF _Toc456268670 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370030000000

你真的明白了吗?.
PAGEREF _Toc456268671 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370031000000

测试1
PAGEREF _Toc456268672 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370032000000

测试2
PAGEREF _Toc456268673 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370033000000

测试3
PAGEREF _Toc456268674 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370034000000

测试4
PAGEREF _Toc456268675 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370035000000

答案.
PAGEREF _Toc456268676 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370036000000

测试1
PAGEREF _Toc456268677 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370037000000

测试2
PAGEREF _Toc456268678 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370038000000

测试3
PAGEREF _Toc456268679 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600370039000000

测试4
PAGEREF _Toc456268680 \h
1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003400350036003200360038003600380030000000

自增量

++a; 自加1

--a; 自减1

自增量的作用是将变量的值 加上1。

下面的2个示例演示了?
变量++后 对变量值的影响。


int
number = 10;

number++;

Console.WriteLine(number);
//number = 11


int
number = 10;

++number;

Console.WriteLine(number);
//number = 11

下面演示变量++后对表达式值的影响

++放在右边

?number++ 放在表达式中则表示 先使用number这个值,然后再把number的值+1

result的值是 10 +11呢 还是10 + 10呢?


//放在后面++

int
number = 10;

int
result = 10 + number++;

Console.WriteLine(number);//11

Console.WriteLine(result);//10+10=20

上面的代码相当于这样

//

// int result = 10 + number++;相当于

//
int result = 10 + number;

//
number++;

++放在左边


//++放在左边

int
number = 10;

int
result = 10 + ++number;

Console.WriteLine(number);//11

Console.WriteLine(result);//10
+ 11 =21

?

//

// int result = 10 + ++number;相当于

//
++number;

//? int result = 10 + number;

?

减减同上

--在左边


//后置--

int
number = 10;

number--;//9

--number;//8????? 8-1

int
result = 10 + --number;//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


//--放在左面

int
number = 10;

number--;

--number;

int
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。

示例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
= 9 + 1 + 1 = 11

c
=

这要和示例1对比

示例1中的a = x++ + 11; 表达式中只有一个x++和一个11

x++不是加在自己身上的,而是加在别人身上的,示例1中的a后面没有x了,而本例是有x的,所以第一个x++自加后的值会变成后面的x++的值。

结果 c = 9 + 11 + 10 =
30

其实c的值和c = x++
+ 11 + x;是一样的

放在一起


int x = 9;

int a = x++ + 11;

int b = ++x + 11;

int c = x++ + 11 + x++;

x
=

?代码从上至下执行,x自加1 出现了4次,所以
x=9+4=13

a
=

?x++是右置的,所此值不变 a = 9+11 = 20

b
=

?注意在算b的值前,先搞清楚此时的x的值是多少,是9呢还是10呢,很明显是10,应为a中的x已经自+1了一次,并且b中的++是在左边所以此处的x为11(10+1得到的),所以b的值
b = 11 + 11 = 22

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
Main(string[] args)

{

??? int x = 7;

??? int y = ++x + x--;

??? Console.WriteLine("x
= {0}", x);

??? Console.WriteLine("y
= {0}", y);

??? Console.ReadKey();

}

x
=

y
=

测试2


staticvoid
Main(string[] args)

{

??? int x = 7;

??? int y = ++x + --x;

??? Console.WriteLine("x
= {0}", x);

??? Console.WriteLine("y
= {0}", y);

??? Console.ReadKey();

}

x
=

y
=

测试3


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();

}

x
=

y
=

测试4


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();

}

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
Main(string[] args)

??????? {

??????????? int x
= 5;

??????????? 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();

}

来自为知笔记(Wiz)

时间: 2024-10-16 10:20:10

加加减减(你真的懂++--吗) C#的相关文章

C# DateTime 日期加1天 减一天 加一月 减一月 等方法(转)

//今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-1).ToShortDateString(); //明天,同理,加一 DateTime.Now.AddDays(1).ToShortDateString(); //本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止 DateTime.Now.AddDays(C

加加减减

加加减减(pands.pas/c/cpp) [题目背景]话说zyk又双叒叕在A图论的题目了!!![问题描述]zyk手里有若干幅有向图,每条边有个权值.你可以在这幅图上操作若干次(也是醉了),每次可以选择一个节点u和一个整数d,把以u为起点的边的权值增加d,把以u为终点的边的权值减小d(难怪叫加加减减).然而,zyk却想让所有边权的最小值为正且尽量大.[输入文件]输入包含若干组数据.每组数据第一行为两个整数n和m(n≤500,m≤700),即点和边的个数.以下m行每行三个整数u,v,w,即一条起点

OC中使用UI自定义控件实现计算器的设计(版本1简单的加减乘除,连加,连减,连除,连乘)

OC中使用UI自定义控件实现计算器的设计(版本1简单的加减乘除,连加,连减,连除,连乘) #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIApplicationDelegate> { float _operator1; float _operator2; float _result; } @end #import "ViewController.h" @interfac

【C++】{记录}自加、自减(补充)

// // main.cpp // [记录]自加.自减(补充) // // Created by T.P on 2018/3/7. // Copyright ? 2018年 T.P. All rights reserved. // #include <iostream> using namespace std; int main() { int val=5; cout<<"val="<<val<<endl; cout<<val

“三次握手,四次挥手”你真的懂吗?

原文出处: Stefno 记得刚毕业找工作面试的时候,经常会被问到:你知道"3次握手,4次挥手"吗?这时候我会"胸有成竹"地"背诵"前期准备好的"答案",第一次怎么怎么,第二次--答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去我也不懂,皆大欢喜! 作为程序员,要有"刨根问底"的精神.知其然,更要知其所以然.这篇文章希望能抽丝剥茧,还原背后的原理. 什么是"3次握手,4次挥手"

你真的懂 ajax 吗?

前言 总括: 本文讲解了ajax的历史,工作原理以及优缺点,对XMLHttpRequest对象进行了详细的讲解,并使用原生js实现了一个ajax对象以方便日常开始使用. damonare的ajax库:damonare的ajax库 原文博客地址:你真的懂ajax吗? 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志. 正文 相信每个前端程序员日常工作中都避免不了的工作就是

CSS:你真的懂margin吗?

你真的了解margin吗?你知道margin有什么特性吗?你知道什么是垂直外边距合并? margin在块元素.内联元素中的区别?什么时候该用padding而不是margin?你知道负margin吗?你知道负margin在实际工作中的用途吗?常见的浏览器下margin出现的bug有哪些?…… 写css,你少不了与margin打交道,而对于这个平时我们最常用的css属性我们并非十分了解.介于此我打算写下这篇文章,一来是自己工作中的总结,也是对自己知识的一次梳理. Margin是什么 CSS 边距属性

你真的懂软件测试吗?

所谓金山银四,又是一波求职月,不安的因素在悸动.测试行业也是如此,作为软件测试员的我也在寻求更好的职业机会,软件测试岗同时也在做筛选,所谓优胜劣汰. 那么面临跳槽季,想在测试行业大展身手的你,真的懂软件测试嘛?小黑板,划重点~ 1.基础知识掌握 这部分,属于对自身的基础能力考查.也是进入测试行业的标准,包括:软件测试原理.软件测试的测试方法了解(刚入行,先了解起来).掌握常见的测试工具(如:UI自动化测试工具TestWriter.开源测试工具QTP.selenium等)等. 2.测试流程掌握 新

带自加加这一类常会出现的错误

只能说,有些错误实在太隐蔽了,刚觉得自己会考虑如何更简洁优化的写出程序了,但是反而会因为自己的进一步而犯进一步的错误(但这是另人高兴的错误是不哈哈,不能因为怕犯错误而不向前),例子来自经典教材 看似两个一样的程序,自加类常回出现这种错觉 void twiddle1(int* xp, int * yp) { *xp += *yp; *xp += *yp; } void twiddle2(int* xp, int * yp) { *xp += 2* *yp; } 乍一看,都是 *xp = *xp +