一. 先解说一个简单的例子: int i=5; i+=i-=1;
这式子相当于是 i+=(i-=1);
i-=1后得到4, 但还来不及存入i, 就把得到的4加入刚开始的i,
之后i变成是9
这式子翻成bytecode 为
0: iconst_5
1: istore_0
2: iload_0
3: iinc 0, -1
6: iload_0
7: iadd
8: istore_0
本题 i=2; i+= i-= i*i;
相当于 i=2; i+= (i-= i*i);
这式子相当于是 i+=(i-=1);
i-=1后得到4, 但还来不及存入i, 就把得到的4加入刚开始的i,
之后i变成是9
这式子翻成bytecode 为
0: iconst_5
1: istore_0
2: iload_0
3: iinc 0, -1
6: iload_0
7: iadd
8: istore_0
本题 i=2; i+= i-= i*i;
相当于 i=2; i+= (i-= i*i);
i-=i*i 变 -2, 再加入原先的i 得到0.
为什么在VC 下面运行,结果为-4? 哪位大神可以帮助解答?
#include "stdio.h"
int main(){
int i=2;
int j=2;
int temp = j+=j-=j*j;
printf("j=%d\n",temp);
printf("i+=i-=i*i=%d\n",i+=i-=i*i);
return 0;
}
二.
(1) i=i+1
它的效率最低,因为其执行过程如下: