我在代码中有以下这行
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;
下面的更改可以编译成功:
signed int test_case= -2147483647;
signed int test_case= 2147483649;
signed long test_case= -214748364800;
- 有人看到过Visual Studio 2015编译器的这个问题吗?
- 它是如何定义数据类型的?
- 它如何进行范围检查?
- 为什么它似乎忽略了“signed”赋值?
谢谢。
2,147,483,647
是最大的int
,所以对2,147,483,648
(应用了-
)不再是int
。signed long long test_case = -2147483648ll;
- Pixelchemist