1樓:匿名使用者
這種問題,沒必要糾結。
如果是 q=(++j)+(++j);//結果是7+7=14連續加法,正常邏輯應該為3*8=24,但實際上,因為編譯器的優化,連加被分割為兩次暫存器運算,等價於:
int edx = (++j)+(++j);
q = edx + (++j);
這樣就成了7+7+8=22
這是優化問題,不必糾結。
這就是實際運算模式,如果明白彙編,可以看懂。
2樓:匿名使用者
這個細心點就好 ++i 和i++的區別 共同點都是i自增1 只是++i和i++前增後不變 在計算過程中一定要注意i值得變化 在算一遍就好
3樓:匿名使用者
c語言的前置++和後置++,稱為自增運算子前置--和後置--稱為自減運算子,下面以自增運算子的區別來加以介紹,自減類似
如果單獨寫 自增運算子為一個語句,二者沒有區別++i; 和 i++; 都是讓i+1賦值給i但是如果把自增運算子寫入到另外表示式中二者就有很大區別了例如i=5;
j=i++;
執行後i為6,j為5
i=5;
j=++i;
執行後i為6,j為6
4樓:雪豹出擊
在一個完整的表示式中使用自增或者自減是由***的。也就是說c語言不保證 p=(i++)+(i++)+(i++),這三個i++的執行順序,並不一定是從左至右分別執行三個i++,有可能是跳著執行,例如q中的三個++j就不是從左至右依次執行的。但是c保證一個完整的表示式中,p,q的i,j分別自增了三次,也就是保證最後的i,j 都是8,但是不保證p,q的值。
所以應該避免在程式中使用類似的聯絡自增自減表示式,以避免出現不可預知的結果啊。
5樓:
這個結果和編譯器有關,沒什麼意義,程式設計時應儘量避免。
6樓:
你看這個**。先求的p結果是14 , 按我們算應該是13,但編譯器是在編譯過程中認為()裡面的優先順序的相同的,而且都是先自增,所以編譯器就把先把這兩個自增計算了,然後就是7+7了。
而下面是一樣的,前二個也是同時進行。後面才進行也就是7+7+8,最後為22. (我以前也問過,老師用編譯後的彙編**給我解釋的)
7樓:oo鐵戒指
同求,為什麼我算的是21
c語言裡關於自增自減運算子的問題
8樓:金色潛鳥
字首加/減 與 字尾加/減 的不同 -- 在於表示式 裡 的 值。
表示式 裡, 字首加 要先自增, 後使用。
表示式 裡, 字首減 要先自減, 後使用。
表示式 裡, 字尾加 要先使用原值。出了表示式後 再自增。
表示式 裡, 字尾減 要先使用原值。出了表示式後 再自減。
a=++i; 字首加 要先自增, 後使用。執行: i=i+1; a=i ; ( i=7; a=7;)
b=i++; 字尾加 要先使用原值。出了表示式後 再自增。執行 b=i; i++; (b=7;i=8)
a=--i; 字首減 要先自減, 後使用。i=i-1; a=i; (i=7;a=7)
b=i--; 字尾減 要先使用原值,執行. b=i.i=i-1; (b=7; i=6)
printf("%d\n",-i++); 字尾加 要先使用原值。出了表示式後 再自增. 列印 -i; (-6) 出了表示式 i=i+1;(i=7)
printf("i=%d\n",i); 列印 i=7
9樓:時尚裝飾萊兒
我在vc6·0上編寫了一下 這是截圖
首先是前兩個7 因為i++是先賦值在進行加一運算,++i是先加一然後再進行賦值操作,所以a,b中儲存著值是7,此時i的值是8
然後是後面兩個7,同理 a為7,b為7,此時i為6同理,-i++中因為++在後面 所以先輸出-6,然後在把i加一 這是i變成了7
最後 根據輸出格式 輸出了 i=7;
c語言關於自增自減運算子的一個問題
10樓:伊·梵
這個沒什麼好討論的,tc就是這樣的結果
換vc就會發現另外一個結果
在一個表示式中對一個變數的多次自增(增減)操作,其運算結果依賴編譯器的實現方式
顯然,這裡tc對int 和 float 採取了不同的法則
11樓:匿名使用者
第一個程式x=5,而第二個程式x=1
結果當然不一樣啦。
12樓:我不知道想請教
當然不一樣啊
一個是%d 是以十進位制形式輸出
%f 是輸出單精度型 預設6位小數
13樓:匿名使用者
我明白你的意思是什麼,你不清楚的是這裡y=++x*++x這個運算,因為++的優先順序在*之上,所以先進行兩次自增才進行乘運算,而++在x前,所以每自增一次都要存回x,所以連續進行兩次,*的兩邊都相當於自增兩次,所以是7*7=49,後一個同理
C語言中增1減1運算子,c語言關於自增自減運算子的一個問題
小嫣老師 自增 和自減 操作符為物件加1或減1操作提供了方便簡短的實現方式。它們有前置和後置兩種使用形式。i 等同於 i i 1。和 既可寫在變數之前,稱為前置運算,如 a a 和 也可以寫在變數之後,稱為後置運算,如 a a 對單獨一個變數實行前置運算或後置運算,其結果是相同的,都是使該變數的值增...
關於C語言指標自增運算的問題,c語言中指標可不可以用在自增自減運算子中
搗蒜大師 這寫操作等價 p p 都是p加,然後 這些操作等價 p p p 相當於先 了,然後p再 include main p 指向2 printf d n p 2 p p 1 p指向3 printf d n p p指向4,再 4 p p 1 p指向5 printf d n p 5,p指向6 p p...
c語言自增運算子問題
肯定不一樣的,運算子很簡單,a 和 a首先將他看成一個賦值表示式a 是a a 1,當a初始值為0的時候a會等於1。但是a 和 a的區別是a 整個表示式的值是從0開始而 a是先做自加運算再賦值其整個表示式 a的值為1 不一樣,a 叫後置自加,a叫前置自加.區別就是a 是先運算後自加,另一個是先自加,後...