2010-10-08 130 views
-1
#include <stdio.h> 

int main() 
{ 
    int x = 4, y, z; 
    y = --x; 
    z = x--; 
    printf("%d %d %d", x, y, z); 
} 

輸出:2 3 3遞增和遞減運算符

任何人都可以解釋一下嗎?
i =+ j是什麼意思(假設爲i = 1j = 2)?

+4

這是功課嗎? – 2010-10-08 13:56:15

+0

應該是'int main()',並且printf中的''n''應該在末尾 – pmg 2010-10-08 14:00:02

+0

嗨,ive可以直觀地向您顯示您的代碼發生了什麼。所以你可以通過簡單的方法一步一步地瞭解它,通過你的代碼讓你知道發生了什麼。所以你可以通過引用你的代碼來解釋它。檢查出來 – Pavan 2010-10-08 14:16:07

回答

3

簡單的解釋:

--x或++ X:值會被後修飾。

x--或x ++:值會之前被修改

詳細說明:

--x或++ X預遞減-/增量:將第一先執行遞減或遞增操作,然後分配x。

x--或x ++交:遞減/增量:將第一指定x值,然後它會做遞減或遞增後的操作。

讓編寫代碼在一個更好的格式,並通過你的代碼一步一步和註釋它向你展示在視覺上會發生什麼:

main() { 
    //We declare the variables x, y and z, only x is given a value of 4. 
    int x=4,y,z; 

    //--x will decrement var x by 1 first THEN it will assign the value of x to y. 
    //so: x = 3, y = 3 and z = nothing yet. 
    y = --x; 

    //x-- will assign the value of x to z first, then var x will be decremented by 1 after. 
    //so: x = 2, y=3 and z = 3 
    z = x--; 

    printf ("\n %d %d %d", x,y,z); 

} 
+0

好吧,我明白了謝謝你的詳細描述。我還有一件事:這是什麼意思; I = + J; – Ashutosh 2010-10-08 14:23:51

+0

這將無法正常工作,這意味着什麼。只有+ =和其他類型的工作。 + = - = * =/=%=等等......他們是賦值操作符。 y + = x等於y = y + x。任何更多的問題id願意幫助。儘管= +在Perl中工作。那麼Perl再次瘋狂,它可以讓你做任何事情。 :D – Pavan 2010-10-08 14:35:57

+0

因此,如果允許,應該怎麼做。 – Ashutosh 2010-10-08 14:40:39

6

後綴遞減運算符(x--)在遞減之前返回該變量的值。

  • x = 2,因爲您減少了兩次 。
  • Y = 3,因爲你之後分配 它爲x 的值將其從4
  • Z = 3遞減 ,因爲你已經 它賦值給x 前的值它從3遞減。
3

您必須瞭解後遞減和預遞減算子的概念。

兩者都會減少您的變量,但其中一個將返回原始值(x--),其中一個將返回遞減值(--x)。

0

後綴遞減(x--)與前綴遞減( - x)不同。 前者返回值x,然後遞減;後者遞減並返回值。

如果你一個後綴是如何在低級別寫的東西,你會發現這是一個比liiiitle前綴慢... :)

9

y = --x手段「減少由一個X,然後存儲結果在Y」

z = x--指 「保存x的溫度由一個減少X沿z存儲臨時值」

因此:。

  • X開始於。
  • 它減少1(至3)。 3存儲在y中。
  • x被保存到一個溫度。 x再次下降(至2)。那麼temp(3)存儲在z中。
  • y和z打印爲3,x被打印爲2
+0

-1:這不完全正確。 x--表示「保存x的溫度值,x減1」,返回溫度值。這種區別通常沒有什麼區別,但是在這種行爲變得相關的地方存在奇怪的情況(通常涉及寫得不好的代碼)。如果你試圖自己實現一個增量操作符,這也是相關的。 – Brian 2010-10-08 14:16:59

+0

啊,沒錯。現在糾正它。 – Jakob 2010-10-08 14:18:03

+0

+1用於更正解釋。另外,由於微觀優化,這種區別也是相關的(即,在可能的情況下,由於不需要臨時性,預先增量優於後期增量)。 – Brian 2010-10-08 14:21:15

0
y = --x; 

X遞減,則Y被分配有X的值(3)

z = x--; 

ž被分配有X(3)的值,將X遞減(2)

0

是:

X = 4
y =預先遞減x(基本上減1,然後賦值,即Y = X-1 = 3
X = 3
Z =減量後-X(由1 遞減後分配值,即Z = X = 3,則x = X - 1
X = 2

那麼X = 2,Y = 3,Z = 3,你看到了什麼。

0

如果運營商是一個前綴分配之前的增量情況發生,如果運營商是一個後綴分配後的增量情況

0

let **是增量/減量運算符**e意味着適用於**e評估結果e**意味着評估e,然後應用**

人體工程學,如果遞減和評價分隔,代碼讀作:

int x=4,y,z; 
x-=1;//3 
y = x;//3 
z = x;//3 
x-=1;//2 

,讓你你有輸出中)

0
  • X ++/x--稱爲後增加/減少(值後修改值)
  • ++ x/++ x被稱爲遞增/遞減(前值修正...)

這是發生(大概)在你的榜樣是什麼:

int x=4,y,z; // declare x=4, y=0, z=0 
y = --x;  // decrement x then assign it to y (pre decrement) (y=x=3) 
z = x--;  // assign x to z then decrement x (post decrement) (z=3 and x=2) 
printf ("\n %d %d %d", x,y,z); // output 2 3 3 

預遞增/遞減看起來像這樣的僞

read value 
increment/decrement value 
write value 
assign value 

和後遞增/遞減看起來像這樣

read value 
assign value 
increment/decrement value 
write value 
0
#include<stdio.h> 
main() 
{ 
int x=4,y,z; 
y = --x; 
z = x--; 
printf ("\n %d %d %d", x,y,z); 
} 

輸出2,3,3 .... .............................第一次x = 4罰款。 y = - x表示x的值減1並存儲在y中,因此現在y = 3且x也是3.則z = x--表示x的值存儲在z(z = 3)中並且那麼x遞減,即現在x = 2但z = 3。當UR打印值,則printf()的打印2 3 3

0

談論i=+j;裝置(給定I = 1和j = 2)

i=+j;相當於i=i+j;所以你的表達式變爲i=1+2i=3