程序输出没有意义

问题描述 投票:0回答:3

我不明白这背后的逻辑.. 我希望这个程序输出2但输出3 你能解释下面代码的工作原理:

#include <stdio.h>

int main()
{    int a = - -3; 

    printf("a=%d", a);

    return 0;
}
c arithmetic-expressions
3个回答
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 */

3
投票

- -3是一个双重因此取消否定。

它是一个等于3的表达式。除了在2的补语系统上未定义的-INT_MIN,双重否定相当于一元加+

如果您已经编写了--3,那么最大的munch规则会将其编译为尝试减少常量3,这是不允许的,并且编译将失败。


0
投票
a = - -3;

被解析为

a = - (-3);

所以你是否定负面的3,给予积极的3

如果你打算写

a = --3;

然后你会得到一个编译时错误,因为--运算符不能应用于常量表达式。

© www.soinside.com 2019 - 2024. All rights reserved.