我不明白这背后的逻辑..
我希望该程序输出2
,但它输出3
您能否解释以下代码的工作原理?
#include <stdio.h>
int main()
{ int a = - -3;
printf("a=%d", a);
return 0;
}
答案 0 :(得分:4)
在
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 */
答案 1 :(得分:3)
- -3
是双精度的,因此取消了求反。
这是一个等于3的表达式。除了-INT_MIN
(在2的补码系统中未定义)之外,双数取反等效于一元加+
。
如果您编写了--3
,则最大咀嚼规则会将其编译为尝试减量常量3
,即不允许,编译会失败。
答案 2 :(得分:0)
a = - -3;
解析为
a = - (-3);
因此,您要否定3
,否定3
。
如果您打算写
a = --3;
那么您将得到一个编译时错误,因为--
运算符无法应用于常量表达式。