1樓:幻想祕境
c=(a-=++a),(a+=b,b+=4);//這句反彙編後的內容如下,下面是分析,望採納!!!
0040103d mov eax,dword ptr [ebp-4] //可見ebp-4的地方儲存a的值,這條指令將"a"的值放到暫存器eax中
00401040 add eax,1 //eax值加1,也就是a=a+1
00401043 mov dword ptr [ebp-4],eax //將eax的值放回ebp-4這個記憶體地址,以下ebp-4的值用a表示
00401046 mov ecx,dword ptr [ebp-4] // 將a的值放到ecx暫存器中
00401049 sub ecx,dword ptr [ebp-4] //將a減去ecx暫存器中的值(ecx中的值就是a,這句相當於c語言中的a-=a,可見執行a-=++a這句時是將a的值先加1,再a-=a),所以最終a=0
0040104c mov dword ptr [ebp-4],ecx //將ecx的值運算完後放回a中
0040104f mov edx,dword ptr [ebp-4] //將a的值放到edx暫存器中
00401052 mov dword ptr [ebp-0ch],edx //這裡ebp-0ch就是c的值,將edx的值放到c中(edx的值就是a的值,a=0,所以c也等於0),
00401055 mov eax,dword ptr [ebp-4] //再次將a的值放到eax暫存器中
00401058 add eax,dword ptr [ebp-8] //這裡ebp-8就是b的值,也就是eax=eax+b(也就是a=a+b,a=0+0=0,a=0)
0040105b mov dword ptr [ebp-4],eax //將eax值放回a
0040105e mov ecx,dword ptr [ebp-8] // 將b的值放到ecx中
00401061 add ecx,4 //將ecx中的值加4,(ecx=4)
00401064 mov dword ptr [ebp-8],ecx //將ecx的值放回b中(b=4),最終結果a=0,b=4,c=0
望採納!!!
2樓:曦陽如歌
c=a-a(a先自加為1,然後再減就為0了)
3樓:
中間那句等價於
++a;
a=a-a;
c=a;
a=a+b;
b=b+4;
,的優先順序低於=
c語言xyz為什麼等於,c語言x y z為什麼等於
等號優先順序低於邏輯運算子。int x 1,y 2,z 3 j x y z 運算順序為 x y 結果為0 0 z 結果為0 j 0根據x y z的值,自己推導一下吧 要看你的x y z是怎麼定義的了 如果直接就int x,y,z 預設成都是0 y z 是不對的 所以 0 x y z x 0 也是不對...
C語言程式設計,c語言程式設計。
判斷 字串 s是否和 相等 strcmp s,表示s字元陣列是否是等於號加上字串結束符,其實單單比較是否為等於號 改為 c語言程式設計 int mian 應該是int main 你要輸入一個數才行,建議你加一個提示輸入的語句 c語言程式設計。else 非字母 switch read buf brea...
c語言問題,C語言問題?
include include int main max min i 0 sum i 0 i 1 i 2 i 3 i 4 i 5 i 6 for j 0 j 6 j printf 去掉一個最高分 0.6lf max printf 去掉一個最低分 0.6lf n min printf 該選手最後的得分...