簡體   English   中英

增量和減量運算符

[英]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 = 1j = 2 )?

y = --x表示“將x減1,然后將結果存儲到y”

z = x--表示“保存x的溫度。將x減1。將溫度值存儲在z中”

因此:

  • x從4開始
  • 它減少了1(至3)。 3存儲在y中。
  • x保存為一個臨時值。 x再次減小(至2)。 然后將溫度(3)存儲在z中。
  • y和z打印為3,x打印為2。

后綴減量運算符(x--)返回變量減量前的值。

  • x = 2,因為您將其遞減了兩次。
  • y = 3,因為您已將其從4遞減分配給x的值
  • Z = 3,因為你已經將它分配給x的值,然后才從3遞減。

您必須了解減量后和減量前運算符的概念。

兩者都會減小您的變量,但是其中之一將返回原始值( 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+2i=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

這給了你你的輸出;)

  • 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
#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM