增量和减量运算符

时间:2010-10-08 13:53:02

标签: c increment

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

12 个答案:

答案 0 :(得分:9)

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。

答案 1 :(得分:6)

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

  • x = 2,因为你减少了它 两次。
  • y = 3,因为你已经分配了 它是之后的x 的值 从4
  • 减少
  • z = 3,因为你 将其分配给x的值 之前它从3开始递减。

答案 2 :(得分:3)

你必须理解后递减和预递减算子的概念。

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

答案 3 :(得分:3)

简单说明:

- x或++ x :值将在。

之后修改

x--或x ++ :值将在

之前修改

详细说明:

- x或++ x 预递减/递增:将首先执行递减或递增的操作,然后它将分配x。

x--或x ++ post:递减/递增:首先分配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);

}

答案 4 :(得分:0)

Postfix减量(x--)与前缀减量(--x)不同。 前者返回值x,然后递减;后者递减然后返回值。

如果你认为后缀是如何在低级别编写的,你会发现它比前缀慢了......:)

答案 5 :(得分:0)

y = --x;

X递减,然后Y赋值X(3)

z = x--;

Z被赋值为X(3),X被递减(2)

答案 6 :(得分: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,正是你所看到的。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

**成为递增/递减运算符。 **e表示**应用于e并评估结果,而e**表示评估e,然后应用{{ 1}}到它

因此,如果分离和评估是分开的,则代码如下:

**

它为您提供了您的输出;)

答案 9 :(得分:0)

  • x ++ / x - 被称为 post 增量/减量(在...之后修改的值)
  • ++ x / ++ x 被称为 pre 递增/递减(在...之前修改的值)

以下是您的示例中(大致)发生的事情:

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

答案 10 :(得分: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。当你打印该值时,printf()打印2 3 3

答案 11 :(得分:0)

谈论i=+j;的含义(给定i = 1和j = 2)

i=+j;相当于i=i+j;,因此您的表达式变为i=1+2,即i=3