【问题标题】:Output of program does not make sense程序的输出没有意义
【发布时间】:2018-09-07 09:39:57
【问题描述】:

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

#include <stdio.h>

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

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

    return 0;
}

【问题讨论】:

  • 你为什么期望 2? - - 不是前缀减少运算符--。另外,--++不能用在3这样的整型常量上,因为它不是可写变量。

标签: c arithmetic-expressions


【解决方案1】:

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 */

【讨论】:

    【解决方案2】:

    - -3 是一个双精度数,因此取消否定。

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

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

    【讨论】:

      【解决方案3】:
      a = - -3;
      

      被解析为

      a = - (-3);
      

      所以你否定了一个否定的3,给出了一个肯定的3

      如果你打算写

      a = --3;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-19
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 2018-05-11
        • 1970-01-01
        相关资源
        最近更新 更多