c中遞增運算子的問題,c 中遞增運算子的問題

時間 2022-07-13 23:40:15

1樓:孟飛鍾凱捷

對於int等整形來說,大部分編譯器都已經做過優化,++i和i++效率沒差別;

而對於使用者自定義的型別,過載++、--運算子,(type)++或者(type)--會先返回該型別的臨時複製物件,如果使用者不需要用到這個功能,就造成了無形中的效率降低;而++(type)並不會進行複製臨時物件的步驟,所以說字首格式的效率更高

2樓:郜良御博超

字尾運算:c

=a++;

等價於:c=

a;a=a

+1;嵌綴運算:d

=++a;

等價於:a=

a+1;d

=a;明白了?嵌綴是先加後用,字尾是先用後加。

這個只是標準裡面規定的,實際中字首和字尾的運算順序並不一定就是這樣,依賴於編譯環境。所以,聰明人不會這樣寫。會把這一句拆開來寫,這樣可以保證運算順序不會出問題。

3樓:匿名使用者

都是i=i+1的意思,區別在於i++是i先不自加,在語句完後自加,++i先自加;列如a=1+i++;i本來為1的話,這裡a=1+1;語句完後i才加1為2;

a=1+++i的話就先i=i+1;i=2.然後a=i+1,a=3

c++,字首遞增,和字尾遞增運算子都怎麼過載?

4樓:捐你妹

#include <iostream.h>class counter

counter operator ++();

counter operator ++(int );

void print()

private:

unsigned v;

};counter counter::operator ++()counter counter::operator ++(int)void main()

c語言三目運算子問題。

5樓:陌上

如果y值為0則輸出的是後面的「no」然後回車,如果不為0則直接輸出回車。判斷語句中0為假。不為0為真。

請問大家在c++中遞增運算子"++"的問題。

6樓:

題目錯了...前面是b後面是d...

而且答案也錯了...

應該是輸出

1012

才對...

c=a++//這裡的++在後面 你可以直接理解為是把c=a 然後++是留到下次運算的時候加上

d=++a//這應該是等於12,因為前面的++效果這時候才加上,然後a就等於11,再加上這次a前面的++(前面的++就是這次先加上然後再給)所以是12...

字首和字尾就是直接看++是在a的前面還是後面.前面就是先加.後面就是下乙個式子的時候才加.

7樓:匿名使用者

a++是先用a 然後再加1

++a是在用a之前,先加1,使用a

8樓:匿名使用者

簡單的說:

c = a++;就是

c = a;

a = a+1;

而d = ++a; 就是

a = a+1;

d = a;

乙個是用了再加,乙個是加了再用。

9樓:匿名使用者

字尾運算:c = a++;

等價於:

c = a;

a = a + 1;

嵌綴運算:d = ++a;

等價於:

a = a + 1;

d = a;

明白了?嵌綴是先加後用,字尾是先用後加。

這個只是標準裡面規定的,實際中字首和字尾的運算順序並不一定就是這樣,依賴於編譯環境。所以,聰明人不會這樣寫。會把這一句拆開來寫,這樣可以保證運算順序不會出問題。

c++中自增運算子前後置的問題

10樓:

第乙個是整個式子計算完,i再自增4次。所以是1+1+1+1+自增的4等於8。

第二個是先自增4次,在進行加法運算,所以是5+5+5+5等於20.

11樓:匿名使用者

根據c99標準

在上乙個和下乙個序列點之間,乙個物件所儲存的值至多只能被表示式的求值修改一次。而且只有在確定將要儲存的值的時候才能訪問前乙個值。

像你這個

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

在兩個序列點之間有四次讀取,5次修改,iso c明確表示這是無明確定義的行為。也就是說,無需知道它們到底做什麼,編譯器也不必支援它們。

所以首先我們無需關心它到底等於多少,其實即使vs2010給出了乙個值,也並不代表它是正確的,不同編譯器給出的值並不相同,甚至兩次執行給出的值也可以不同,即使不給出計算結果,報出異常也是被允許的。

c++,關於先增後增的問題。與運算順序相關

12樓:

建議你不要糾結這東西,編譯器不同結果就可能不同。我的編譯器對a是這麼算的:先算(i++)+(++i)放在乙個臨時變數中,結果是3+3=6;然後計算最後乙個++i結果是4並與臨時變數中的6加起來是10,把10賦給a。

結束運算後再計算第乙個i++,結果i為5。所以最後輸出:5↙10。

第二個表示式被解釋為b=(i++)+[(++i)++]+i;,所以與a=(i++)+(++i)+(++i);不一樣。為什麼這麼解釋?因為c/c++在判斷表示式時遵守所謂「貪心」演算法,即從左至右一次解釋最多的運算符號……

c++運算子的自增自減

13樓:暢秋梵安

這是一類特殊的運算子,自增運算子++和自減運算子--對變數的操作結果是增加1和減少1。例如:

--couter;

couter--;

++amount;

amount++;

看這些例子裡,運算子在前面還是在後面對本身的影響都是一樣的,都是加1或者減1,但是當把他們作為其他表示式的一部分,兩者就有區別了。運算子放在變數前面,那麼在運算之前,變數先完成自增或自減運算;如果運算子放在後面,那麼自增自減運算是在變數參加表示式的運算後再運算。這樣講可能不太清楚,看下面的例子:

num1=4;

num2=8;

a=++num1;

b=num2++;

a =++num1;這總的來看是乙個賦值,把++num1的值賦給a,因為自增運算子在變數的前面,所以num1先自增加1變為5,然後賦值給a,最終a也為5。b=num2++;這是把num2++的值賦給b,因為自增運算子在變數的後面,所以先把num2賦值給b,b應該為8,然後num2自增加1變為 9。

那麼如果出現這樣的情況我們怎麼處理呢?

c=num1+++num2;

到底是c=(num1++)+num2;還是c=num1+(++num2);這要根據編譯器來決定,不同的編譯器可能有不同的結果。所以我們在以後的程式設計當中,應該盡量避免出現上面複雜的情況。

c++自增運算?答案以及解釋

14樓:匿名使用者

第乙個是錯的k=k+i++;

可以拆解為k=k+i;

i=i+1;

i++ 和 ++i;前乙個是 後自增,第二個是前自增;

第乙個是i參與別的運算後再加1,後乙個是自身加1後再參與運算。

c 邏輯運算子,c 中邏輯運算子的問題。

x 2 y和z的值不變 邏輯運算 x的值為1,因此後面的語句沒有執行 參考 短路求值 作為 和 操作符的運算元表示式,這些表示式在進行求值時,只要最終的結果已經可以確定是真或假,求值過程便告終止,這稱之為短路求值。這是這兩個操作符的乙個重要屬性。假如expr1和expr2都是表示式,並且expr1的...

C 過載 運算子的問題,c 運算子過載問題

只拿了你有疑問的兩個函式出來討論,看是否明白 time time operator 這是字首 return this time time operator int 這是字尾 return temp time operator 這表示前 即 time1 呼叫該函式 time operator int ...

《是什麼運算子,C 中 運算子和 運算子有什麼區別

表示位移,3 1 二進位制位移00000011位移1位變成00000110,也就變成了6 魂大人的店鋪 分別表示迴圈左移 和 環右移 比如乙個8 位數 81h,二進位制的就是1000 0001,假設最初的進製位c為0 帶進製迴圈左移後,最高位移入進製位,此時,進製位c為1,數為0000 0010 再...