c語言優先運算問題

2022-12-24 01:46:33 字數 1536 閱讀 8769

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 等價...