社区
C#
帖子详情
请教c#的加法运算顺序
cassad
2010-08-18 10:36:03
int a = 4;
a += (a++);
为什么最后得到a的结果是8,而不是像c语言中得到的结果为9。
请大家告诉原因,谢谢。
...全文
179
8
打赏
收藏
请教c#的加法运算顺序
int a = 4; a += (a++); 为什么最后得到a的结果是8,而不是像c语言中得到的结果为9。 请大家告诉原因,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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#
编程入门基础,开启你的编程之旅
C#
使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,而绝不损失C/C++原有的强大的功能。因为这种继承关系,
C#
与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向
C#
。 ................................................................................................
C#
从入门到进阶
C#
从入门到进阶
lua虚拟机字节码修改_从零开始实现 Lua 虚拟机 ( UniLua 开发过程 )
大约是2013年初,部分由于工作需要,部分由于个人的强烈兴趣,在云风大大的指导下,我使用
C#
编写了一套较为完整的 Lua 实现: UniLua ( GitHub - xebecnan/UniLua: A pure
c#
implementation of Lua 5.2 focus on compatibility with Unity )可惜后来由于工作调整,用纯 c 实现的 lua 就可以...
C语言博客作业—字符数组
一、PTA实验作业 题目1:字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 (1)定义i为循环变量,number用于存放每一次转化的结果,flag用于判断是否为负数,p用于修改结果的正负; (2)定义字符型数组hexad,并输入字符串; (3)for( from i=0 to hexad[i]!='#' ) //遍历数组 if(hex...
C/C++笔试题
1.进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系
C#
111,095
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章