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) ;
}
这是问题,找到答案我只是运行程序并找到结果
a = 0 b = -6 c = 0
但我不应该在回答这些问题时使用电脑。所以这是一个问题:无论如何,任何' - '标志都有编译器会让它正确吗?有一对支撑'b'而不是'c',显然没有区别。有人请解释一下吗?
谢谢。
答案 0 :(得分:7)
每个一元-
否定了它之前的表达,并从右到左结合。此外,它具有更高的优先级,即从左到右绑定的二进制-
运算符。所以这个:
c= -3 - - - -3;
与:
相同c= (-3) - (- (- (-3)));
是的,这些表达式的结果已经明确定义。
另一方面,如果你正在处理preincrement或postincrement运算符--
或++
,并尝试在同一个表达式中多次在同一个变量上使用它们,那就是你运行的时候进入undefined behavior。
答案 1 :(得分:0)
这只是改变标志
a = -3 - -3 = -3 + 3 = 0
b = -3 - - (- 3) = -3 - (+3) = -3 - 3 = -6
c = -3 - - - -3 = -3 - - 3 = -3 + 3 = 0
答案 2 :(得分:-1)
-3 - - ... - - 3
读为负三负负...负负3.