(++i)+(++i)+(i++)等于多少?怎么算的。。

来源:百度知道 编辑:UC知道 时间:2024/05/28 13:43:39

k=(++i)+(++i)+(i++);
和 k=++i + ++i + i++ 的结果是一样的,就是说括号对前缀++和后缀++不起作用的,只要你是前缀++,加不加括号都是先加再运算,只要你是后缀++,加不加括号都是先运算再++
这个表达式在vc6。0下面的结果当i=1的时候是9,为什么是9,看了汇编就知道,运算的时候先取+的两个操作数,这2个操作数实际上是同一个内存里的东西,先求第一个操作数++i之后为2,再取第2个操作数++i为3,但是,实际上操作的是同一个内存,所以他们的运算结果是,实际上是3+3=6,运算的中间结果另外开辟存储区,因为后缀是先再运算+所以结果为6+3=9,之后再i++,所以i为4

在visual2005下面的结果是12

00411395 mov eax,dword ptr [i]
00411398 add eax,1
0041139B mov dword ptr [i],eax
0041139E mov ecx,dword ptr [i]
004113A1 add ecx,1
004113A4 mov dword ptr [i],ecx
004113A7 mov edx,dword ptr [i]
004113AA add edx,1
004113AD mov dword ptr [i],edx
004113B0 mov eax,dword ptr [i]
004113B3 add eax,dword ptr [i]
004113B6 add eax,dword ptr [i]
004113B9 mov dword ptr [t],eax

可以看出visual2005是先求出这3个操作数再运算的,但是这3个操作数其实是同一块内存,操作数结果为4,所以就是4+4+4=12