[英]Increment and Decrement Operators
#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 = 1
和j = 2
)?
y = --x
表示“將x減1,然后將結果存儲到y”
z = x--
表示“保存x的溫度。將x減1。將溫度值存儲在z中”
因此:
后綴減量運算符(x--)返回變量減量前的值。
您必須了解減量后和減量前運算符的概念。
兩者都會減小您的變量,但是其中之一將返回原始值( x--
),而其中之一將返回減小的值( --x
)。
簡單說明:
--x或++ x :之后將修改值。
x--或x ++ :值將在之前修改
詳細說明:
--x或++ x : 遞減/遞增:首先將執行遞減或遞增操作,然后將分配x。
x--或x ++ : post:decrement / increment :將首先分配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);
}
談論i=+j;
均值(給定i = 1和j = 2)
i=+j;
等價於i=i+j;
所以你的表情變成i=1+2
即i=3
后綴減量(x--)與前綴減量(--x)不同。 前者返回值x,然后遞減。 后者遞減然后返回值。
而且,如果您對如何以較低的級別編寫后綴感興趣,您會發現它比前綴慢一點點... :)
y = --x;
X遞減,然后Y分配X的值(3)
z = x--;
Z分配了X的值(3),X遞減(2)
是:
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,與您所看到的完全一樣。
如果運算符是前綴,則增量發生在分配之前,如果運算符是后綴,則增量發生在分配之后。
令**
為遞增/遞減運算符。 **e
手段申請**
到e
和評估的結果 ,而e**
手段評估e
然后申請**
給它 。
因此,如果將減量和求值分開,則代碼為:
int x=4,y,z;
x-=1;//3
y = x;//3
z = x;//3
x-=1;//2
這給了你你的輸出;)
在您的示例中,這大致發生了:
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
#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。 當您打印該值時,然后printf()打印2 3 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.