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