请教c#的加法运算顺序

cassad 2010-08-18 10:36:03
int a = 4;
a += (a++);
为什么最后得到a的结果是8,而不是像c语言中得到的结果为9。
请大家告诉原因,谢谢。
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用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

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧