如何评估多个减号运算符?

1 c

int main( void )
{

    int a, b,c ;
    a = -3 - - 3 ;
    b = -3 - - ( - 3 ) ;
    c= -3 - - - -3;

    printf ( "a = %d b = %d c=%d", a, b ,c) ;
}
Run Code Online (Sandbox Code Playgroud)

这是一个问题,找到答案我只是运行程序并找到结果

a = 0 b = -6 c = 0

但我不应该在回答这些问题时使用电脑.所以这是一个问题:无论如何,任何' - '标志都有编译器会让它正确吗?有一对支撑'b'而不是'c',显然没有区别.有人请解释一下吗?

谢谢.

dbu*_*ush 7

每个一元都-否定了它之前的表达,并从右到左结合.此外,它具有更高的优先级,-即从左到右绑定的二元运算符.所以这:

c= -3 - - - -3;
Run Code Online (Sandbox Code Playgroud)

是相同的:

c= (-3) - (- (- (-3)));
Run Code Online (Sandbox Code Playgroud)

是的,这些表达式的结果已经明确定义.

另一方面,如果您正在处理preincrement或postincrement运算符,--或者++尝试在同一个表达式中多次在同一个变量上使用它们,那么当您遇到未定义的行为时.

  • 为了完整性:`c =( - (3)) - ( - ( - ( - (3))));`另一个`()`大约3.`-`不是整数常量`3`的一部分. (2认同)