i iii在C C下printf結果不同的解釋

2022-07-03 05:15:14 字數 5414 閱讀 4870

1樓:汪好帥

解釋很簡單,就是不同的編譯器環境,對這個邏輯性有歧義的算式有不同的解析過程。所以產生不同的結果。

具體說也不甚瞭解。要對c++和c#編譯器原理進行深究了。

2樓:匿名使用者

單個的i--,i++,++i,--i與編譯器沒有關的,前者是先使用變數再做加減操作,後者是先做加減操作,再使用變數;

但是對於++i+(++i)+(++i)這種的,不同的編譯環境處理是不同的。

假設i = 3;

對於vc來說,上面的結果為16,tubo c為18.

3樓:匿名使用者

在c++語言中,i++,i--之後列印出的是i本身的值。而++i,--i則是先對其進行運算,列印的是i+1和i-1的值。對於c#,答案基本一致。

4樓:匿名使用者

就是參與運算與自增的順序問題

當有右結合時要考慮特殊順序 比如

void main()

c#結果8,8,7,8

c++結果8,7,7,8

5樓:匿名使用者

例如i=3

第一:i++=3 i=4

第二:i--=3 i=2

第三:++i=4 i=4

第四:--i=2 i=2

(i++) + (++i)結果怎麼解釋 50

6樓:匿名使用者

int i = 10; int x = 2;

x=((i++)+(++i));

//這是 輸出結果 x=22, i=12

以下解釋 :

//先 : i+=1, i=11 , (臨時變數a) =11//後 : (臨時變數b)=11, i+=1 , i=12 ;

//結果: x = 臨時變數a+臨時變數b=22

7樓:科力爾

你用vc,vs結果是5,用gcc,dev c++或者其他編譯器就不一定是5了

8樓:gta小雞

++imov eax,dword ptr [ebp-4]; 將i的內容取出放到eax暫存器

00401032 add eax,1; 將eax暫存器加1

00401035 mov dword ptr [ebp-4],eax; 將eax暫存器的內容寫回i

i+i00401038 mov ecx,dword ptr [ebp-4]; 將i的內容取出放到ecx暫存器

0040103b add ecx,dword ptr [ebp-4]; 將i的內容與ecx暫存器的內容相加,結果存到ecx暫存器

0040103e mov dword ptr [ebp-4],ecx; 將ecx暫存器的內容寫回i

i++00401041 mov edx,dword ptr [ebp-4]; 將i的內容取出放到edx暫存器

00401044 add edx,1; 將edx暫存器的值加1

00401047 mov dword ptr [ebp-4],edx; 將edx暫存器的內容寫回i

++i、--i和i++、i--的區別理解

9樓:

++i、--i和i++、i--的區別:

1、執行時間不同。

++ i先執行i +1,然後執行程式i ++先執行程式,然後執行i +1 int i = 8; printf(「%d \ n」,++ i)首先執行加法,因此列印輸出為9 printf(「%d \ n」,-i)。

2、進行減法的順序不同。

首先執行減法,列印輸出為8 printf(「%d \ n」,i ++), 首先執行程式。 列印輸出為8。列印完成後,i為99printf(「%d \ n」,i--)。

3、執行程式的結果不同。

列印後列印為9, 是8 printf(「%d \ n」,-i ++), 如果首先執行程式,則列印輸出為-8。 列印完成後,i為9 printf(「%d \ n」,-i--)。 首先執行程式, 列印輸出為-9,列印後,是8}。

10樓:蟲心菜

i++和++i命令的區別有:

1、賦值順序不同

++ i 是先加後賦值;i ++ 是先賦值後加;++i和i++都是分兩步完成的。

因為++i 是後面一步才賦值的,所以它能夠當作一個變數進行級聯賦值,++i = a =b,即 ++i 是一個左值;i++ 的後面一步是自增,不是左值。

形象的理解可以是i++先做別的事,再自己加1,++i先自己加1,再做別的事情。

2、效率不同

比如i=3,b=i++就是說b=3,完成之後讓i變成4,b=++i就是先讓i++變成4,然後b=4,其中++i比i++效率要高些。一般來說在迴圈域裡面,這兩者並沒有什麼很大的區別,但是要注意其生存週期,以及i值在程式流中的變化。

3、 i++ 不能作為左值,而++i 可以。

左值是對應記憶體中有確定儲存地址的物件的表示式的值,而右值是所有不是左值的表示式的值。一般來說,左值是可以放到賦值符號左邊的變數。

但能否被賦值不是區分左值與右值的依據。比如,c++的const左值是不可賦值的;而作為臨時物件的右值可能允許被賦值。左值與右值的根本區別在於是否允許取地址&運算子獲得對應的記憶體地址。

比如:int i = 0;

int *p1 = &(++i);//正確

int *p2 = &(i++);//錯誤

++i = 1;//正確

i++ = 1;//錯誤

擴充套件資料

當i=5時,s=(++i)+(++i)和s=(i++)+(i++)的值:

1、當i=5時,s=(++i)+(++i)=13 先算第一個(++i),++在前面,就把i先加1再把賦值,即先把i變為6然後再得出(++i)的值為6,這時i已經變為6了,

再計算第二個(++i),++在前面也是先把i加1後再賦值,不過這時的i已經為6了,第一步的時候把i變成6了的,然後加1的話就變成7了,所以第二個(++i)的值為7,s=(++i)+(++i)=6+7=13。

2、s=(i++)+(i++)=11 先算第一個(i++),i在前面,就先賦值再把i加1,即(i++)的值為5,i的值變為6,第二個(i++),i在前面,先賦值再把i加1,這個時候的i已經為6了,即(i++)的值為6,而i已經變為7了。所以s=(i++)+(i++)=5+6=11。

11樓:鍾離毅君薊瑤

因為i++的意思是i在使用過後+1,座椅執行完第二條語句之後i就變成3了。

++i是在使用前+1,那麼結果就會變成b=3

i=3了。

12樓:蹄子

++i 先執行i+1後執行程式 i++ 先執行程式後執行i+1 int i=8; printf("%d\n",++i);//先執行加法 所以列印出來的是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 }

13樓:匿名使用者

關於自增自減運算,很多書籍沒有把問題講清楚,在c語言裡是這樣的:

1.後置運算:k++表示先運算,後自加。

意思是遇到k++了,我先把當前的k的值拿來參加運算,後面再去管它的自加。

那麼,【「後面」後到什麼程度呢?要後到當前的語句執行完,即遇到分號;表示

語句執行完了,所以k才自加1。】

如:int k=5,b=0;

b=k++;的意思就是,先算b=k(即b=5),遇到分號;表示語句結束,k才自加1,即k變為6。

2.前置運算:++k表示先自加,後運算

這個意思就是遇到++k了,先把k的值加了1,再往後執行別的。

如:int k=5,b=0;

b=++k;的意思就是,先把k自加1,即k為6,再算b=k(即b=6)。

掌握好這兩點,k--和--k也是一樣的道理。

14樓:匿名使用者

++i是在進行運算之前使i自增1,再用增後的值進行運算i++是在進行運算之後才使i增1,使用原值進行運算一次後,再使i自增1

你執行一下這個再體會體會就明白了:

i=1;j=1;k=1;t=1;

m1=i++ + i++;

m2=++j + ++j;

m3=k++ + ++k;

m4=++t + ++t;

(注:自增自減速運算只能對變數進行,常量和表示式不能進行該運算)

在c++語言中,i++與++i有什麼區別?那i--和--i呢

15樓:匿名使用者

這種演算法要用例子才能說明的了!比較全面的例子好像這樣:

當i=5時,求s=(++i)+(++i)和s=(i++)+(i++)的值

當i=5時,s=(++i)+(++i)=13 先算第一個(++i),++在前面,就把i先加1再把賦值,即先把i變為6然後再得出(++i)的值為6,這時i已經變為6了,再計算第二個(++i),++在前面,也是先把i加1後再賦值,不過這時的i已經為6了,第一步的時候把i變成6了的,然後加1的話就變成7了,所以第二個(++i)的值為7,s=(++i)+(++i)=6+7=13.

s=(i++)+(i++)=11 先算第一個(i++),i在前面,就先賦值再把i加1,即(i++)的值為5,i的值變為6,第二個(i++),i在前面,先賦值再把i加1,這個時候的i已經為6了,即(i++)的值為6,而i已經變為7了!所以s=(i++)+(i++)=5+6=11.

相信你看得懂這個例子,基本上就會怎麼算了!

i--和--i跟i++和i++是一樣演算法的,只不過一個是加一個是減!

------白豬(幸福快樂)

16樓:匿名使用者

後自增i++與前自增++i本身都是先進行自增(++)操作,然後在進行賦值等操作,但是這裡容易搞錯的問題是:後自增操作符即i++返回的是將運算元原來的、未修改的值作為表示式的結果值;前自增操作符即++i返回的是將修改後的的運算元的值作為表示式的結果值。尤其要注意的是:

在這之後前自增和後自增中i值都增加了1。

下面來看一個例子:

#include

using namespace std;

int main ( )

可以**結果為: a = 10 b = 11我們將此程式編譯執行後發現,結果確實如此。現在應該明白了吧。

同理i--和--i也是如此

17樓:憨憨漂移

兩者都是i的自加,也就是說兩個運算執行之後i都是比原來大1,不同的它們都是表示式,表示式++i的值就是i自加後的值,而++i是i自加前的值,同理--i與i--也是這個道理

實際測得的風能利用係數在不同的風速下的值不同,說明什麼問題

風力發電機的能量轉換 2.1 風能的計算 空氣有一定質量,因此流動時具有一定能量,稱為風能。風能的表示式為 e 1 2psv3 式中 s 單位時間內氣流流過截面積 p 空氣密度 v 風速 其中p和v隨地理位置 海拔和地形等因素而變。2.2風力發電機的效率 風力發電機的氣動理論是由德國的貝茲 betz...

維氏硬度在不同負荷下的值可直接對比麼

國家標準裡面已經說明,不同的負荷 不同的壓頭 不同的硬度測試方式不具有可比性。維氏硬度只用一種標尺,是可比的 維氏硬度不同載荷下的測試換算 維氏硬度值是壓痕面積除以載荷的商,單位是壓強。隨載荷增加相應的壓痕面積線性增加,兩者商不變。明白了吧用0.2千克的載荷和0.5千克的載荷得到的硬度值是不變的。當...

馬達的額定功率在不同電壓和頻率下會改變嗎

會改變。電機功率與電壓有關,其關係 p 1.732 u i,與頻率無關。額定電壓為380v的電機不適合在440v電壓應用,雖然功率可以提高,但繞組會因過熱燒燬。額定功率是指用電器正常工作時的功率。它的值為用電器的額定電壓乘以額定電流。若用電器的實際功率大於額定功率,則用電器可能會損壞。在正常執行工作...