程序的输出没有意义

时间:2018-09-07 09:39:58

标签: c arithmetic-expressions

我不明白这背后的逻辑..
我希望该程序输出2,但它输出3
您能否解释以下代码的工作原理?

#include <stdio.h>

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

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

    return 0;
}

3 个答案:

答案 0 :(得分:4)

int a = - -3;

此语句没有--(decrement operator),它是一元减运算符,它使- -33(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;

那么您将得到一个编译时错误,因为--运算符无法应用于常量表达式。