1樓:
優先順序問題
「++與--」要比「*」高
所以是a是先自增自減(保持不變)後再相乘的
你自己不是回答了嘛
如果還不瞭解,就看下下面的反彙編得到的彙編**
k=++a*--a;
0040105f mov eax,dword ptr [ebp-4] //dword ptr [ebp-4]可以理解為a變數,將a的值傳給暫存器eax
00401062 add eax,1// eax加1
00401065 mov dword ptr [ebp-4],eax// eax傳給a
00401068 mov ecx,dword ptr [ebp-4]// 這後面的對比上面一樣的
0040106b sub ecx,1// 減
0040106e mov dword ptr [ebp-4],ecx
00401071 mov edx,dword ptr [ebp-4]
00401074 imul edx,dword ptr [ebp-4]// 乘
00401078 mov dword ptr [ebp-8],edx
// 這裡彙編**很簡單,相信你會仔細看的,有這樣的提問說明有好好思考過,以後遇到同樣問題可以直接看反彙編的**
//每條指令前的數字比方「00401062」不用管它,它表示的是指令地址而已
//關鍵看那個操作符 比方add mov sub imul
2樓:匿名使用者
自增/自減運算,當++/--在運算元之前時,先執行自增和自減運算;當++/--在運算元之後時,先執行其他運算。
k = ++a * --a;
先把a的值加1賦值給a(a = a + 1),此時a = 4然後把a的值減1賦值給a(a = a - 1),此時 a = 3再把兩個a相乘,即3 * 3
最後把結果賦值給k,此時k = 9
k = a++ * ++a + a-- * --a;
1:執行++a,此時a = 4
2:執行--a,此時a = 3
3:執行a * a + a * a = 3 * 3 + 3 * 34:執行k = a * a + a * a = 185:執行a++,此時a = 4
6:執行a--,此時a = 3
最後建議不要這麼寫程式,除非是做題目~~
3樓:匿名使用者
你的那段程式相當於下面的(其中,前兩個輸出是跟蹤了a的值)int a=3,k;
a=a+1;
printf("%d\n",a);
a=a-1;
printf("%d\n",a);
k=a*a;
printf("%d",k);
先計算的是++a,得到a為4.在計算--a,得到a=3後計算a*a。得到9
當計算了++a時,a的值變成了4,後面計算--a時用得是剛剛自加過的a,不是原來的a=3.。
4樓:社保小龍蝦
k=++a*--a;
k=++3*--3
k=9a=3
c語言優先順序問題,C語言中和誰優先順序更高
改為 即可。不需要那麼多括號,而且 0可以省略。當且僅當y或a為閏年數時 y 4 0 y 100 0 y 400 0 即當y是4的倍數時不能為100的倍數 否則為0 或y是400的倍數時為1.後面同理。c語言中 和 誰優先順序更高 的高 優先順序 高到低 第一級 圓括號 下標運算子 分量運算子的指向...
C語言的運算子的優先順序 邏輯運算子 條件運算子 賦值運算子
1 最高階 出現同級別運算子時的結合方向是從左往右 下面級別沒寫結合順序時,預設是從左往右 圓括號 下標運算子號 指向結構體成員運算子 結構體成員運算子 2 第二級 型別 sizeof。這一級都是單目運算子號,這一級的結合方向是從右向左。比如出現 p 這時 和 同級別,先算右邊,再左邊。所以 p 等...
c關於運算子優先順序,c中的運算子優先順序順序是什麼
因為 只是在這copy條語句結束後才 1,假設a 0,則a a 等同於0 0,當然是錯的了,但是現在a的值變為1 補充一點,c 不提倡在同一語句當中多次修改同一個變數的值,樓主知道怎麼回事就行了,有些跟編譯器有關 後置自加是 先取值,變數才加 所以a a 中,大於運算子比較的是相同的值。a a 等價...