如何修复错误代码C4146“unary减运算符应用于unsigned type.result仍未签名”?

时间:2015-03-30 20:46:29

标签: c integer precision

数据类型int的最小值为-2,147,483,648。

所以,我输入了

int val = -2147483648;

但是,它有一个错误:

unary minus operator applied to unsigned type.result still unsigned

我该如何解决?

2 个答案:

答案 0 :(得分:8)

2147483648超出了您平台上的int范围。

使用具有更高精度的类型来表示常量

int val = -2147483648L;
// or
int val = -2147483648LL;

(取决于哪种类型的精度高于平台上的int)。

或者采用好的旧- 1技巧

int val = -2147483647 - 1;

答案 1 :(得分:4)

-2,147,483,648被解释为2147483648的否定。 2147483648超过系统上的最大正整数,并被视为无符号。

相反,请尝试

-2147483647 - 1