2010-10-08 90 views
-1
#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)?

+4

这是功课吗? – 2010-10-08 13:56:15

+0

应该是'int main()',并且printf中的''n''应该在末尾 – pmg 2010-10-08 14:00:02

+0

嗨,ive可以直观地向您显示您的代码发生了什么。所以你可以通过简单的方法一步一步地了解它,通过你的代码让你知道发生了什么。所以你可以通过引用你的代码来解释它。检查出来 – Pavan 2010-10-08 14:16:07

回答

3

简单的解释:

--x或++ X:值会被后修饰。

x--或x ++:值会之前被修改

详细说明:

--x或++ X预递减-/增量:将第一先执行递减或递增操作,然后分配x。

x--或x ++交:递减/增量:将第一指定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); 

} 
+0

好吧,我明白了谢谢你的详细描述。我还有一件事:这是什么意思; I = + J; – Ashutosh 2010-10-08 14:23:51

+0

这将无法正常工作,这意味着什么。只有+ =和其他类型的工作。 + = - = * =/=%=等等......他们是赋值操作符。 y + = x等于y = y + x。任何更多的问题id愿意帮助。尽管= +在Perl中工作。那么Perl再次疯狂,它可以让你做任何事情。 :D – Pavan 2010-10-08 14:35:57

+0

因此,如果允许,应该怎么做。 – Ashutosh 2010-10-08 14:40:39

6

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

  • x = 2,因为您减少了两次 。
  • Y = 3,因为你之后分配 它为x 的值将其从4
  • Z = 3递减 ,因为你已经 它赋值给x 前的值它从3递减。
3

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

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

0

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

如果你一个后缀是如何在低级别写的东西,你会发现这是一个比liiiitle前缀慢... :)

9

y = --x手段“减少由一个X,然后存储结果在Y”

z = x--指 “保存x的温度由一个减少X沿z存储临时值”

因此:。

  • X开始于。
  • 它减少1(至3)。 3存储在y中。
  • x被保存到一个温度。 x再次下降(至2)。那么temp(3)存储在z中。
  • y和z打印为3,x被打印为2
+0

-1:这不完全正确。 x--表示“保存x的温度值,x减1”,返回温度值。这种区别通常没有什么区别,但是在这种行为变得相关的地方存在奇怪的情况(通常涉及写得不好的代码)。如果你试图自己实现一个增量操作符,这也是相关的。 – Brian 2010-10-08 14:16:59

+0

啊,没错。现在纠正它。 – Jakob 2010-10-08 14:18:03

+0

+1用于更正解释。另外,由于微观优化,这种区别也是相关的(即,在可能的情况下,由于不需要临时性,预先增量优于后期增量)。 – Brian 2010-10-08 14:21:15

0
y = --x; 

X递减,则Y被分配有X的值(3)

z = x--; 

ž被分配有X(3)的值,将X递减(2)

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,你看到了什么。

0

如果运营商是一个前缀分配之前的增量情况发生,如果运营商是一个后缀分配后的增量情况

0

let **是增量/减量运算符**e意味着适用于**e评估结果e**意味着评估e,然后应用**

人体工程学,如果递减和评价分隔,代码读作:

int x=4,y,z; 
x-=1;//3 
y = x;//3 
z = x;//3 
x-=1;//2 

,让你你有输出中)

0
  • 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 
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。当UR打印值,则printf()的打印2 3 3

0

谈论i=+j;装置(给定I = 1和j = 2)

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