1樓:匿名使用者
++(--)i是先自加(減)後,i++(--)是執行過了再自加(減).
所以++i 輸出9,次時i=9;--i則輸出8;(此i=8)i++=9;(但是要在輸出以後才變為9,所以輸出的結果是8,此時i=9);同理i--=8但是輸出為9.
後面的只是加個負號,讓他變為負數計算罷了.原理相同的.
2樓:乾博裕
這問題很無聊
我真懷疑c語言的發明人,發明這個時腦子是不是發熱
3樓:
第1個輸出的是 ++i i=8
所以輸出9
第2個輸出的是--i 這時候i=9所以輸出8第3次輸出的是i++ 這時候i=8所以輸出的i++的植是8但i=9了
第4次應該輸出的是-9 最後一次是-8
你看這次對了嗎? 不明白可以加qq67766582
4樓:匿名使用者
void main(){ int i=8;
printf("%d\n", ++ i); 這一步加上1 得到9,先加再取值
printf("%d\n",--i); 得到8 先減再取值
printf("%d\n",i ++ ); 得到 8 實際的i是 9先取值再自加
printf("%d\n",i--); 得到 9 實際運算後i 是8先取值再自減
printf("%d\n",-i ++ );得到-8 運算之後i本身是9
printf("%d\n",-i--);得到 -9 運算之後i 本身是 8
5樓:匿名使用者
9889
-8-9
這樣才對
關於c語言自加和自減的問題
6樓:匿名使用者
這個不是優先順序或者是結合性的問題,這個是求值順序的問題c語言本身沒有規定求值順序,所以是由編譯器自己確定的這一點可以參考譚浩強的《c程式設計(第四版)》p367,有詳細的介紹或者也可以參考k&r的《c程式設計語言》(中文 第二版·新版)p43
7樓:匿名使用者
依賴於不同的編譯器,根據不同的優先順序,從左向右執行還是從右向左執行
8樓:匿名使用者
只需要記著j=i++相當於i=i+1;j=i而j=++i相當於j=i;i=i+1剩下的都差不多類推一下就行了!
9樓:匿名使用者
不要寫這種無法控制的**。
10樓:匿名使用者
我覺得應該跟編譯器有關,編譯器如果認為i=3,k=(i++)+(i++)+(i++)中三個(i++)是同一個數,則都先取i值3,得9,然後i自增3次,i的值變為6.
如果編譯器認為(++m)+(++m)+(++m)+(++m)中每個(++m)不同,則自右向左(通常情況下)m依次先自增,結果每個(++m)的值都不同,2+3+4+5=14...
c語言自加自減能不能舉例詳細解釋一下
11樓:寒易凝
i++;i自增1,表示式的值不變
++i;i自增1,表示式的值變為i自增後的值i--;i自減1,表示式的值不變
--i;i自減1,表示式的值變為i自減後的值(134),還有涉及逗號符表示式知識點
附:逗號表示式
逗號表示式的一般形式可以擴充套件為
表示式1,表示式2,表示式3……表示式n
它的值為表示式n的值。
12樓:匿名使用者
a = i++
其意思就是指,先把a的值賦值給a。然後i再加1。
a = ++i;
和以上就是相反的。
i加1,然後再把2賦值給a
13樓:明月看盡滄桑
c = ( a = a - (++a))
按照上述優先順序標識,執行結果為a = c = 0;
a = a + b ==> a = 0;
b = b + 4 ==> b = 4 。
哪位高手能我解釋一下,關於c語言的自加和自減,越詳細越好。
14樓:
自增(自減類同,以下只以"自增"為例)運算需要留意的一個主要關鍵點即是前自增(++i)和後自增(i++)的區別,大致說來,二者的區別如下:
1) 前自增是"先完成自增,後參與表示式運算"的;後自增卻恰恰相反,於是會產生如下區別:
int i = 0;
printf("%d", i); // 輸出 0
printf("%d", ++i); // 輸出 1,此句執行後 i 的值為1
printf("%d", i); // 輸出 1
printf("%d", i++); // 輸出 1,此句執行後 i 的值為2
printf("%d", i); // 輸出 2
產生如上差別的原因正是:在第五行中,i 是先參與了printf語句輸出,後完成自增運算的。
2) 如果你瞭解如上**編譯到彙編級別後的**便會知道為何前自增與後自增會有如上差別,同時也會注意到之二者的另一個重要差別便是前自增運算的記憶體開銷和時間開銷均要少於後自增運算,這也是為什麼在迴圈中,如果有自增運算,我們更提倡使用前自增。
不過這一點現在已經很少被提到了,一方面由於現代計算機的效能不斷提升,多數情況下已經不需要考慮之二者這一點點差別了;另一方面,某些現代智慧型的編譯器,會在編譯時自動替你完成這個優化工作的。
15樓:汐_楓
i++,++i 減跟加意義是一樣的,只舉例加的就行了
i++ ==>呼叫i,處理完之後i=i+1;如i=4;printf("%d\n",i++);輸出的是4,可是i=5
++i ==>i=i+1,然後呼叫i;如i=4;printf("%d\n",++i);輸出的是5,同時i=5
c語言自加自減的問題
16樓:匿名使用者
1、c語言中,後置自增(自減)是在執行完所在語句後,變數的值再自增(自減)。
2、舉例說明如下:
int num=0, s=0;
while(num++<3)
// 第1次執行while時,num=0,第1次執行完while後,num=1,此時,s=0+1=1
// 第2次執行while時,num=1,第2次執行完while後,num=2,此時,s=1+2=3
// 第3次執行while時,num=2,第3次執行完while後,num=3,此時,s=3+3=6
// 第4次執行while時,由於num=4>3,所以推出迴圈,最後s=6
17樓:匿名使用者
你要知道「++」,「--」在變數前後的區別。
在前,比如「++x",是先將自增,再賦值,那麼n = (++x)+(++x)就是4+5 = 9
然後,「x--"就是先賦值再自減,那麼剛剛經過n = (++x)+(++x)後,x=5,帶入m=(x--)+(x--)還是等於9。
我覺得答案錯了,不要迷信答案,你自己到vc或者turbo c上跑一下不就解決了。
18樓:
因為++x是先把x自加1,然後再運算。第一次++x,x=4,第二次++x,x=5;然後n=x+x,n=5+5;
因為x--是先運算再自減1,所以m=5+5;m=10
19樓:匿名使用者
他這個是x變數的儲存問題。先看
n = (++x)+(++x);
從右至左,先算++x,x=4,這裡x在暫存器裡的值是4,再算++x,x=5。
注意,關鍵點來了,那這時候,n是等於4+5嗎,不是的。
在進行加法時,a+b,暫存器會在得到a,b的值以後才會開始加法計算,現在,a,b的地址都指向x,當最後x=5時,實際上把a的值也做了改變,變成了5,千萬不要想當然認為有一個臨時變數來儲存開始x=4的值,沒有的。所以結果自然是x+x = 10
同理到x--
c語言 自增自減 誰能詳細說明一下。。。。謝謝了 我都暈了。。。。。。。
20樓:匿名使用者
推薦一個我自己的記憶辦法,這個確實不好記,容易搞混淆:
++a:因為++在前(在「先」),記憶為「先」自加(所以再把自加後的結果賦予左邊表示式)
a++:因為++在「後」,記憶為「後」自加(所以先把沒有加之前的值賦予左邊表示式)
1。第1個printf
a=b=c=5;
a=++b-++c;由於++優先順序大於-,所以等價於a=(++b)-(++c)
因為是先自加(後賦值給a),bc都會自加1變為6,a=(5+1)-(5+1);
a=0 b=6 c=6
2。第2個printf
a=++b+c++;等價於a=(++b)+(c++)
b是先自加,c是後自加。a=(6+1)+6=13
最終不管先自加,後自加,bc都會加1。
a=13 b=7 c=7
3。a=(b--)+(--c)
b後自減,c先自減
a=7+(7-1)=13
b=6c=6
4。a=(-(b++))+c
a=(-6)+6=0
b=7c=6
21樓:匿名使用者
只要清楚自增自減你就知道了
若a=5
b=a++,是先賦值,即b=5,a再自增,a=a+1=6b=++a,是先a自增,a=a+1=6,再賦值,b=a也就是b=6。
自減同理。
然後就是運算子的優先順序問題
a=-b+++c;相當於a=(-(b++))+c
22樓:葵者無敵
a++實際上等同於a=a+1即a 加上一之後的值在賦值給a;
a++與++a 的區別在於前者是先使用a的值,當使用完成後再讓a 的值自加一
而後者是一上來就使用a+1的值
在c語言當中運算子號是有運算的先後順序的「—」與「+」的運算級別就比++和"——"低一些就要先算高的 後算低的
main()
23樓:匿名使用者
++(--)i是先自加(減)後,i++(--)是執行過了再自加(減).
所以++i 輸出9,次時i=9;--i則輸出8;(此i=8)i++=9;(但是要在輸出以後才變為9,所以輸出的結果是8,此時i=9);同理i--=8但是輸出為9.
後面的只是加個負號,讓他變為負數計算罷了.原理相同的.
24樓:匿名使用者
運算子的優先順序
要確定表示式的運算結果:
一、先確定運算子及其歸屬(按上面的運算子優先順序)二、確定表示式的運算順序。
例一:a=++b-++c ;
相當於:
a = (++b) - ( ++c);
進一步擴充套件:
b=b+1;
c = c+1
a = b - c
例2:a = ++b+++c;
相當於:
a =( ++(b++)) + c ;
在歸屬運算子時, 後++優先順序高於 前++, 但運算是在最後執行。
進一步擴充套件:
b = b+1 ; // b的前++a = b + c
b = b+1; // b的後++
25樓:lp豬
起始 a=5 b=5 c=5
a=++b-++c 我想問 這沒有括號?
按答案看 這個是b和c先自加1 然後相減 bc都等於5 自加1 都等於6 相減為0
現在 a=0 b=6 c=6
a=++b+c++
按答案看 b先自加1 再加c c再自加1 b加1等於7 再加c等於13 c再自加1 等於7
現在 a=13 b=7 c=7
a=b--+--c
按答案看 c先自減1 再加b b再自減1 c自減1等於6 再加b等於13 b再自減1 等於6
現在 a=13 b=6 c=6
如果看完上面的 最後一個你自己看懂了 說明自加自減 你已經會了
C語言自增自減問題,c語言的自增自減問題
i 5 應該是a 5吧?x a a a 這種問題沒有必要分析的。在不同的編譯系統下,答案不一樣,在vc 下,答案是24。很直接了當的告訴你,這個無意義的運算在不同的編譯器上可能會有兩種不同的結果.都已經告訴你了.有從左往右,也有從右往左,難道還不明白嗎?這取決於編譯器 此類問題是毫無意義的.因為 像...
C語言自增問題,c語言的自增自減問題
我已經用c實現 include int main 結果為 output 1 i 6 k 9 2 i 6 k 12 3 i 6 k 15 4 i 6 k 18 結果分析 首先看第一個 k i i i 執行過程 首先 k i i i 得到k 9然後執行 i i i 得到i 6再看第二個 k i i i ...
c語言中自加自減運算子前後位置的區別
嗯,自加 自減 從結果上來看都是加1 減1 這點肯定沒錯。但是用在表示式中就會有差別了,拿你的例子來說i 5,如果執行下面的語句 int b i 結果b的值就是5,i的值變為6 如果是b i 那麼b的值就是6,i的值也是6 所以i 與 i使用在表示式中的時候的區別就是 前者是先使用i的當前值進行計算...