1樓:
while(z-->0&&++x<5)y=y-1; 這句話的意思是當z-->0或++x<5有一個不為真,那麼該while結束。關鍵要看z--,是先判斷,後計算,++x是先計算,後判斷,
各步的結果如下:
①1,4,2 /*因為z=3>0,x=x+1=1<5,符合條件,執行迴圈時y=5-1=4,z=3-1=2*/
②2,3,1 /*z=2>0,x=x+1=2<5,符合條件,y=4-1=3,z=2-1=1*/
③3,2,0 /*關鍵是這點,這時的判斷條件是z=1,而非z=0*/
④3,2,-1 /*z=0,迴圈結束,這會明白了吧*/
2樓:
想法2是錯誤的,z--在參與運算時,先使用z的值,使用後再自減。同理可得前字增(減)是先自增(減),再使用其值。
再來分析此題,z-- >0 && ++x < 5 ;z-- > 0 的計算順序為 先判斷 z>0為真假,為真則繼續判斷 ++x<5的真假,全為真則y-1;需要指出的是,不管z>0為真或者為假,都要執行z--;這樣觀察初值,z=0時,不滿足 z>0,但此時仍要進行z--,這樣z變為-1,但++x不會執行,這是&&運算決定的,這樣結果就出來了,x=3,y=2(迴圈體執行了三次)。
關於mcs51微控制器c語言程式設計的問題,自增++與自減--運算不能實現?
3樓:
left=left++;
你見過哪位先人寫過這樣的**?
一般都是這樣的形式left++;作為單 條語句。
其它還是少用為妙。
注意字首還是字尾的區別。這語句有太多的陷阱了。網上關於c語言的書非常的豐富,關於c語言的源**也是極多的,自己找來看看吧。
c語言關於自增自減運算的問題
4樓:匿名使用者
這種問題,沒必要糾結。
如果是 q=(++j)+(++j);//結果是7+7=14連續加法,正常邏輯應該為3*8=24,但實際上,因為編譯器的優化,連加被分割為兩次暫存器運算,等價於:
int edx = (++j)+(++j);
q = edx + (++j);
這樣就成了7+7+8=22
這是優化問題,不必糾結。
這就是實際運算模式,如果明白彙編,可以看懂。
5樓:匿名使用者
這個細心點就好 ++i 和i++的區別 共同點都是i自增1 只是++i和i++前增後不變 在計算過程中一定要注意i值得變化 在算一遍就好
6樓:匿名使用者
c語言的前置++和後置++,稱為自增運算子前置--和後置--稱為自減運算子,下面以自增運算子的區別來加以介紹,自減類似
如果單獨寫 自增運算子為一個語句,二者沒有區別++i; 和 i++; 都是讓i+1賦值給i但是如果把自增運算子寫入到另外表示式中二者就有很大區別了例如i=5;
j=i++;
執行後i為6,j為5
i=5;
j=++i;
執行後i為6,j為6
7樓:雪豹出擊
在一個完整的表示式中使用自增或者自減是由***的。也就是說c語言不保證 p=(i++)+(i++)+(i++),這三個i++的執行順序,並不一定是從左至右分別執行三個i++,有可能是跳著執行,例如q中的三個++j就不是從左至右依次執行的。但是c保證一個完整的表示式中,p,q的i,j分別自增了三次,也就是保證最後的i,j 都是8,但是不保證p,q的值。
所以應該避免在程式中使用類似的聯絡自增自減表示式,以避免出現不可預知的結果啊。
8樓:
這個結果和編譯器有關,沒什麼意義,程式設計時應儘量避免。
9樓:
你看這個**。先求的p結果是14 , 按我們算應該是13,但編譯器是在編譯過程中認為()裡面的優先順序的相同的,而且都是先自增,所以編譯器就把先把這兩個自增計算了,然後就是7+7了。
而下面是一樣的,前二個也是同時進行。後面才進行也就是7+7+8,最後為22. (我以前也問過,老師用編譯後的彙編**給我解釋的)
10樓:oo鐵戒指
同求,為什麼我算的是21
c語言關於自增自減運算的問題,C語言裡關於自增自減運算子的問題
這種問題,沒必要糾結。如果是 q j j 結果是7 7 14連續加法,正常邏輯應該為3 8 24,但實際上,因為編譯器的優化,連加被分割為兩次暫存器運算,等價於 int edx j j q edx j 這樣就成了7 7 8 22 這是優化問題,不必糾結。這就是實際運算模式,如果明白彙編,可以看懂。 ...
C語言中增1減1運算子,c語言關於自增自減運算子的一個問題
小嫣老師 自增 和自減 操作符為物件加1或減1操作提供了方便簡短的實現方式。它們有前置和後置兩種使用形式。i 等同於 i i 1。和 既可寫在變數之前,稱為前置運算,如 a a 和 也可以寫在變數之後,稱為後置運算,如 a a 對單獨一個變數實行前置運算或後置運算,其結果是相同的,都是使該變數的值增...
c語言裡指標自增的問題,C語言指標的自增自減問題,急!
水雅丹郟忻 選d.a可以自減,但自減後a的指向是不可 的,這樣做是危險的,因為它可能佔用了系統正常執行所需要的記憶體,有可能導致系統癱瘓。b同理.c的a代表陣列名,是一個常量,只有變數才能進行自增自減運算。因此選d.因為b 1是b 1 的地址。 風雲1234白羊 剛開始指標p存的是陣列a的地址,也就...