系统粉 > 电脑问答 > 其他问答

已解决求助:自增问题

提问者:langjingjing10  |  浏览次  |  提问时间:2017-01-15  |  回答数量:7

求助:自增问题int x=10,y=9; int a,b,c; a=(--x==y++)?--x:++y; b=x++; c=y; 请问这题中a=(--x==y++)?--x:++y;是怎样执行的? 前自增与后自增有什么不同?

已有7条答案
旧伤心伤负心伤

旧伤心伤负心伤

回答数:23  |  被采纳数:134

前后自增是要看编译器的。
比如我的编译器,前自增是先增加再使用,后自增是先使用再增加。

--x==y++这是一个判断式 比较时,先x-1比较完后y+1 所以 9=9
当为真时,执行分号前面的,为假时执行分号后面的。这是 三元运算符的定义
所以这个时候 a = --x即 a=8
不知道你的编译环境编译出来的结果是什么。
2017-01-15 06:48:22
赞 2
二楼傻缺

二楼傻缺

回答数:55  |  被采纳数:119

版主,谢谢,答对了。不过前后自增不必看编译器的吧?因为C++教材中写明了前自增是先增加再使用,后自增是先使用再增加的。
2017-01-15 09:23:08
赞 5
青春爱太真丶

青春爱太真丶

回答数:224  |  被采纳数:127

我记得C下面就分的,只不过很多主流的编译器都是这样的顺序,C++没用过。等forestfairy来回答吧。 如果是JAVA,那么都是一致的,因为都是一个JVM
2017-01-15 08:47:36
赞 22
薰衣草_凋零

薰衣草_凋零

回答数:64  |  被采纳数:25

版主,我按了F11之后,显示的是这样的。还有看不懂那些mov sub eax,dword ptr[evp-4]这些代码啊。能解释吗?

(1)

2017-01-15 18:15:42
赞 6
彩色薰衣草baby

彩色薰衣草baby

回答数:83  |  被采纳数:22

按F11,显示反汇编,可以看到是怎么执行的(2)
2017-01-15 18:14:40
赞 8
愛不是独旅

愛不是独旅

回答数:146  |  被采纳数:64



点击菜单(3)
a=(--x==y++)?--x:++y;
00401036 mov eax,dword ptr [ebp-4]//将x复制到寄存器eax
00401039 sub eax,1//eax--
0040103C mov dword ptr [ebp-4],eax//将eax复制到x
0040103F mov ecx,dword ptr [ebp-4]//将x复制到ecx
00401042 mov edx,dword ptr [ebp-8]//将y复制到edx
00401045 mov eax,dword ptr [ebp-8]//将y复制到eax
00401048 add eax,1//eax++
0040104B mov dword ptr [ebp-8],eax//将eax复制到y
0040104E cmp ecx,edx//比较ecx和edx
00401050 jne main+53h (00401063)//如果不相等则跳转到00401063行
//以下是--x的代码
00401052 mov ecx,dword ptr [ebp-4]//将x复制到ecx
00401055 sub ecx,1//ecx--
00401058 mov dword ptr [ebp-4],ecx//结果写回到x
0040105B mov edx,dword ptr [ebp-4]//x复制到edx
0040105E mov dword ptr [ebp-18h],edx//再复制到a
00401061 jmp main+62h (00401072)跳转到00401072行
//以下是--y的代码
00401063 mov eax,dword ptr [ebp-8]
00401066 add eax,1
00401069 mov dword ptr [ebp-8],eax
0040106C mov ecx,dword ptr [ebp-8]
0040106F mov dword ptr [ebp-18h],ecx
00401072 mov edx,dword ptr [ebp-18h]
00401075 mov dword ptr [ebp-0Ch],edx
2017-01-15 22:46:36
赞 14
1025251341

1025251341

回答数:131  |  被采纳数:83

谢谢,很详细。
2017-01-15 11:33:43
赞 13
相关问答
最新其他问答
解决方法