【发布时间】:2016-04-28 22:47:18
【问题描述】:
我的代码中有以下行
signed int test_case= -2147483648;
产生错误:
C4146 一元减号运算符应用于无符号类型,结果仍然无符号
但这仍然是有符号整数类型的数据范围:
__int32 signed, signed int, int –2,147,483,648 到 2,147,483,647
奇怪的事情是将它分配为 signed long 给出了同样的错误,即
signed long test_case= -2147483648;
下面的修改编译OK:
signed int test_case= -2147483647;
signed int test_case= 2147483649;
signed long test_case= -214748364800;
- 有人在 Visual Studio 2015 编译器中看到过这个问题吗?
- 如何定义数据类型?
- 如何检查范围?
- 为什么它似乎忽略了“签名”分配?
谢谢
【问题讨论】:
-
你自己写的:
2,147,483,647是最大的int,所以2,147,483,648(应用了-)不再是int。signed long long test_case = -2147483648ll;
标签: c++ visual-studio visual-studio-2015 language-lawyer compiler-warnings