为什么减量运算符--
在执行时不会将值降低 1?
int a = 20;
int c ;
c = a--;
检查c
现在的值,它应该是 19,但结果是 20。我错过了什么?
为什么减量运算符--
在执行时不会将值降低 1?
int a = 20;
int c ;
c = a--;
检查c
现在的值,它应该是 19,但结果是 20。我错过了什么?
a--
是Post-Decrement,你需要--a
Pre-Decrement。请阅读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
您正在使用的称为postfix
运算符。在赋值运算符使用现有=
值完成执行后,它将被执行[递减值] 。
需要明确的是,在后期减量的情况下,..--
一旦包括该操作数在内的其他评估完成,就会评估运算符并安排减量。这意味着,操作数的现有值用于其他评估[in =
] 然后该值减小。
如果需要,请尝试打印a
自身的值。它将打印递减的值。
编辑:
如果我在回答中选择的词语造成了任何混淆,请参考c99
标准,第 6.5.2.4 章,[强调我的]
[对于增量] 后缀 ++ 运算符的结果是操作数的值。得到结果后,操作数的值递增 [……]
后缀 -- 运算符类似于后缀 ++ 运算符,不同之处在于操作数的值是递减的(即从中减去相应类型的值 1)。
您应该使用 --a (前减量运算符),您正在使用后减量运算符 a--
后缀 -- 运算符的结果是操作数的值。作为一个副作用,操作数对象的值被递减(即,相应类型的值 1 被减去)。
您正在使用后期减量。后递减意味着首先使用变量中的值或任何东西,然后递减变量中的值。a
所以在这种情况下,将分配给的第一个值c
。并且减量完成。您可以检查打印的值a
。