【发布时间】:2015-03-30 20:46:29
【问题描述】:
数据类型int的最小值是-2,147,483,648。
所以,我输入了
int val = -2147483648;
但是,它有一个错误:
unary minus operator applied to unsigned type.result still unsigned
我该如何解决?
【问题讨论】:
-
解决这个问题的一种方法是让自己成为一个符合标准的编译器。严重地。自 1999 年以来,C 强制十进制常量始终为
signed类型。所以你的错误是你的编译器的错误。 -
@Jens Gustedt:确实如此,但在这种情况下,不符合问题并不是必需的。在 C99 及更高版本中,如果没有足够宽来表示常量的有符号整数类型,则行为是 undefined。这也“涵盖”了 C89/90 行为:使用无符号类型只不过是未定义行为的特定表现。它也可以看作是定义未定义的编译器特定的扩展。
-
@AnT,这是一个一致性问题。对于 C99,始终存在至少 64 位宽的整数类型,因此这里的常量始终是有效的整数常量。