社区
C#
帖子详情
请教c#的加法运算顺序
cassad
2010-08-18 10:36:03
int a = 4;
a += (a++);
为什么最后得到a的结果是8,而不是像c语言中得到的结果为9。
请大家告诉原因,谢谢。
...全文
218
8
打赏
收藏
请教c#的加法运算顺序
int a = 4; a += (a++); 为什么最后得到a的结果是8,而不是像c语言中得到的结果为9。 请大家告诉原因,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
十八道胡同
2010-08-18
打赏
举报
回复
这个是操作符优先级问题
wuyq11
2010-08-18
打赏
举报
回复
++x x加1后使用x(前置加)
x++ 使用x值后加1(后缀加)
Peter200694013
2010-08-18
打赏
举报
回复
int a = 4;
a += (a++);
--〉 a = a + (a++)
a = 4 + (a++)
a++返回4,然后自增加1 即此时a = 5
然后 a = 4 + 4; 又赋值8
故结果 a为8
bdmh
2010-08-18
打赏
举报
回复
修正一下
0000004f mov dword ptr [ebp-44h],eax 这里被覆盖了
bdmh
2010-08-18
打赏
举报
回复
是的,看看汇编就明白了
a += (a++);
0000003a mov eax,dword ptr [ebp-44h]
0000003d mov dword ptr [ebp-48h],eax
00000040 mov eax,dword ptr [ebp-44h]
00000043 mov dword ptr [ebp-4Ch],eax
00000046 inc dword ptr [ebp-44h] //此处进行了++操作,但是后面并没有用到[ebp-44h]中的数,而是被覆盖掉了
00000049 mov eax,dword ptr [ebp-48h]
0000004c add eax,dword ptr [ebp-4Ch] //这里就被覆盖掉了
0000004f mov dword ptr [ebp-44h],eax
jinguanghai
2010-08-18
打赏
举报
回复
不好意思!刚才着急打错了
int a=4;
"a+=a"和a=a+a是一样的; a++是在本次运行完结后再+1;而不是在本次运行时+1;如果你想最后得到的是9的话,应该这样写:a+=(++a); ++a和a++的不同之处就在于前者是在本次运行中先+1,后者是在本次运行完后再+1。
我回答的很完整,希望+分
jinguanghai
2010-08-18
打赏
举报
回复
int a=4;
"a+=a"和a=a+a是一样的; a++是在本次运行完结后再+1;而不是在本次运行时+1;如果你想最后得到的是9的话,应该这样写:a+=a+(++a); ++a和a++的不同之处就在于前者是在本次运行中先+1,后者是在本次运行完后再+1。
我回答的很完整,希望+分
BusyDonkey
2010-08-18
打赏
举报
回复
a += (a++);
a=a+(a++)
因为加法运算的优先级大于++,而在等号运算符起作用前优先执行了++,最后a又从5赋成了8
C#
运算符优先级
优先级 类别 运算符 1 基本 (x) x.y f(x) a[x] x++ x――new typeof sizeof checked unchecked 2 单目 + - ! ~ ++x ――x (T)x 3 乘法与除法 * / % ...
运算符重载
条件运算符(>,<,>=,<=,==),条件运算符需要成对出现(>,<必须同时实现,>=,<=必须同时实现)重载如 + - * /之类的运算符,让自定义类型(类或结构体)的对象能够使用运算符。算术运算符都可重载(+,-,*,/,%,++等)位运算符都可重载(|,&,^,~,<<,>>等).(点),三目运算符?:,赋值运算符 =。逻辑运算符 &&和||。
同步学习
C#
笔记3(运算符)
这次简单讲述加减乘除等(一下输出结果均不以控制台格式展现)想要在输出结果中的看到数字代表的内容可以这样表示其中,由于程序是将dog重新赋值为dog - cat 的结果,所以若再输出dog - cat并不会得到预计的结果,即减法中第一个结果11=11-10=1后——再输出1-10 得到-9而第二个结果直接输出结果1,是我们想要得到的运算结果。
c#
使用ThreadPool
说到ThreadPool,都知道是线程池。从时间上来排序,大概是这样的,Thread,backgroundworker,ThreadPool,Parallel,Task。其中后面2种是最新的,之前的很少使用,如果是老项目,基本上前面用的多,而新项目,最好使用后面的2种,因为后面的效率以及各方面控制更加的容易上手,需要开发者考虑的问题,也更加的少,使用起来简单方便。1.其中WaitCallback是一个带有参数的方法,所以上面案例,需要传递一个object对象,可见,属于多次一举,但是规定就是这样的。
基于
c#
的相关性分析_
c#
– 相关性数学:(a b)c!= a(b c)
在双重类型的范围:double dbl1 = (double.MinValue + double.MaxValue) + double.MaxValue;double dbl2 = double.MinValue + (double.MaxValue + double.MaxValue);第一个是double.MaxValue,第二个是double.Infinity关于double类型的精度:do...
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章