增量和减量运算符

#include  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 )?

简单说明:

–x或++ x :值将在之后修改。

x–或x ++ :之前将修改值

详细说明:

–x或++ xpre-decrement / increment:首先执行递减或递增的操作,然后分配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); } 

y = --x表示“将x减1,然后将结果存储在y”

z = x--表示“保存x的临时值。将x减1。将临时值存储在z中”

因此:

  • x从4开始。
  • 它减少了1(到3)。 3存储在y中。
  • x保存到temp。 x再次降低(至2)。 然后temp(3)存储在z中。
  • y和z打印为3,x打印为2。

后缀递减运算符(x–)在递减之前返回变量的值。

  • x = 2,因为你已经减少了两次。
  • y = 3,因为从4递减之后 ,您已将其指定为x的值
  • z = 3,因为从3递减之前已将其指定为x的值。

您必须了解后递减和预递减运算符的概念。

两者都会递减你的变量,但其中一个将返回原始值( x-- ),其中一个将返回递减的值( --x )。

Postfix减量(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,正是你所看到的。

如果运算符是前缀,则在赋值之前发生增量,如果运算符是后缀,则在赋值之后发生增量。

let **是一个递增/递减运算符。 **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 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

谈论i=+j; 意味着(给定i = 1且j = 2)

i=+j; 相当于i=i+j; 所以你的表达式变成i=1+2i=3