小编Nin*_*wil的帖子

Visual Studio 2015 - 编译器警告(级别2)C4146

我的代码中有以下行

signed int test_case= -2147483648;
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

C4146一元减运算符应用于无符号类型,结果仍未签名

但这仍然是有符号整数类型的数据范围:

__int32 signed,signed int,int -2,147,483,648 to 2,147,483,647

奇怪的是把它分配为signed long会给出同样的错误,即

signed long test_case= -2147483648;
Run Code Online (Sandbox Code Playgroud)

以下更改编译正常:

signed int test_case= -2147483647;

signed int test_case= 2147483649;

signed long test_case= -214748364800;
Run Code Online (Sandbox Code Playgroud)
  • 有没有人用Visual Studio 2015编译器看到这个问题?
  • 它是如何定义数据类型的?
  • 如何检查范围?
  • 为什么它似乎忽略了"签名"任务?

谢谢

c++ compiler-warnings visual-studio language-lawyer visual-studio-2015

8
推荐指数
2
解决办法
845
查看次数