增量和减量运算符
#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 = 1
且j = 2
)?
简单说明:
–x或++ x :值将在之后修改。
x–或x ++ :之前将修改值
详细说明:
–x或++ x : pre-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+2
即i=3