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電壓應用,雖然功率可以提高,但繞組會因過熱燒燬。額定功率是指用電器正常工作時的功率。它的值為用電器的額定電壓乘以額定電流。若用電器的實際功率大於額定功率,則用電器可能會損壞。在正常執行工作...