为什么 - 运算符在执行时不会从值中减去?

时间:2014-12-30 12:11:34

标签: c decrement postfix-operator

为什么递减运算符--在执行时没有将值减1?

int a = 20;
int c ;

c = a--;

现在检查c的值,它应该是19,但它是20。我缺少什么?

4 个答案:

答案 0 :(得分:1)

a--是后减法,你需要--a预先减少。请阅读Wiki

上的增量和减量运算符
  

以下C代码片段说明了前后增量和减量运算符之间的区别:

int  x;
int  y;

// Increment operators
x = 1;
y = ++x;    
// x is now 2, y is also 2
y = x++;
// x is now 3, y is 2

// Decrement operators
x = 3;
y = x--;    
// x is now 2, y is 3
y = --x;    
// x is now 1, y is also 1

答案 1 :(得分:0)

您正在使用的内容称为postfix运算符。在赋值=运算符使用现有值完成执行后,它将执行[递减值]。

要明确的是,在后递减的情况下,评估..--运算符,并在包括该操作数的其他评估完成后安排递减。这意味着,操作数的现有值用于其他评估 [in =],然后值减少

如果需要,请尝试打印a本身的值。它将打印递减的值。


编辑:

如果我在答案中选择的单词引起了任何混淆,作为参考,可以参考c99标准,第6.5.2.4章,[强调我的]

  

[For increment] postfix ++运算符的结果是操作数的 后获得结果,操作数的值为 递增 [......] < / p>      

后缀 - 运算符类似于后缀++运算符,除了操作数的值递减(即,从中减去相应类型的值1)。

答案 2 :(得分:0)

你应该使用--a(pre decrement operator),你正在使用post decrement operator a -

后缀 - 运算符的结果是操作数的值。作为副作用, 操作数对象的值递减(即,相应类型的值为1 减去它。)

答案 3 :(得分:0)

您正在使用帖子减量。减量后意味着首先使用变量中的值或 然后减去变量中的值。因此,在这种情况下,a的第一个值将分配给c。减量完成了。您可以选中打印a

的值