我不明白这背后的逻辑..
我希望这个程序输出2
但输出3
你能解释下面代码的工作原理:
#include <stdio.h>
int main()
{ int a = - -3;
printf("a=%d", a);
return 0;
}
在
int a = - -3;
这句话没有--(decrement operator)
,它是一元减运算符,这使得- -3
成为3(cancelling negation)
。因此它打印3
。
旁注,如果你想到这一点
int a = --3;
作为打印2
然后你认为错了,因为这导致左值误差,因为--
适用于变量不常数。正确的是
int a = 3;
--a ;/* this is valid,this make a as 2 now */
- -3
是一个双重因此取消否定。
它是一个等于3的表达式。除了在2的补语系统上未定义的-INT_MIN
,双重否定相当于一元加+
。
如果您已经编写了--3
,那么最大的munch规则会将其编译为尝试减少常量3
,这是不允许的,并且编译将失败。
a = - -3;
被解析为
a = - (-3);
所以你是否定负面的3
,给予积极的3
。
如果你打算写
a = --3;
然后你会得到一个编译时错误,因为--
运算符不能应用于常量表达式。