由a+=a-=a*=a想到的


#include <iostream>
using namespace std;
int main()
{


int a = 12;
a += a -= a *= a;
cout<<a;
return 0;
}


結果a爲:0;


;
;編譯環境:vs2008
;
010914C5  mov         eax,dword ptr [a] ;a*=a
010914C8  imul        eax,dword ptr [a] 
010914CC  mov         dword ptr [a],eax 
010914CF  mov         ecx,dword ptr [a] ;a-=a
010914D2  sub         ecx,dword ptr [a] 
010914D5  mov         dword ptr [a],ecx 
010914D8  mov         edx,dword ptr [a] ;a+=a
010914DB  add         edx,dword ptr [a] 
010914DE  mov         dword ptr [a],edx 


結論:+=、-=、/=、*=這些雙目運算符先運算右邊的表達式,所以a+=a-=a*=a ==> a+=(a-=(a*=a));從a*=a的彙編代碼中可以看出
a和a相乘後會把a*a的值寫入到a變量的內存地址中。而且=、+=、-=、/=、*=中的每一個運算都會把結果寫到左值(a)的內存地址中。
發佈了41 篇原創文章 · 獲贊 16 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章