Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C visualstudio中的Long-min限制_C_Visual Studio 2010_Compiler Warnings - Fatal编程技术网

C visualstudio中的Long-min限制

C visualstudio中的Long-min限制,c,visual-studio-2010,compiler-warnings,C,Visual Studio 2010,Compiler Warnings,为什么Visual Studio将常量-2147483648(0x8000000)视为未签名 据我所知,该值在long的最小限制内 例如,如果编译以下内容: long a = -2147483648 编译器将发出以下警告: warning C4146: unary minus operator applied to unsigned type, result still unsigned type 这是因为最大有符号长可以是7FFFFFFF=011111111111111111111111

为什么Visual Studio将常量
-2147483648
0x8000000
)视为未签名

据我所知,该值在
long
的最小限制内

例如,如果编译以下内容:

long a = -2147483648
编译器将发出以下警告:

warning C4146: unary minus operator applied to unsigned type, result still unsigned type 

这是因为最大有符号长可以是7FFFFFFF=0111111111111111111111111111111111。

这是因为最大有符号长可以是7FFFFFFF=0111111111111111111111111111。

这是因为这里的十进制常数不是
-2147483648
,它是
2147483648
,应用了一元
-
运算符。在C语言中,数字常量不包含符号

2147483648在您的实现中超出了
long
的范围,因此根据C89规则,该类型具有
无符号long
。根据C99中引入的规则,它将改为类型
long

要更改此代码以生成类型为
long
的值-2147483648,可以使用:

long l = -2147483647 - 1;

这是因为这里的十进制常数不是
-2147483648
,而是
2147483648
,应用了一元
-
运算符。在C语言中,数字常量不包含符号

2147483648在您的实现中超出了
long
的范围,因此根据C89规则,该类型具有
无符号long
。根据C99中引入的规则,它将改为类型
long

要更改此代码以生成类型为
long
的值-2147483648,可以使用:

long l = -2147483647 - 1;

相关部分:“您可以通过使用INT_MIN from limits.h避免C4146,它的类型为INT。”以下问题之一的可能重复:,,谢谢,伙计们。我应该在发布之前检查msdn。相关部分:“您可以通过使用INT_MIN from limits.h避免C4146,它的类型签名为INT。”以下问题之一可能重复:,,谢谢,伙计们。我应该在发布之前检查msdn。这并不能真正解释这里发生了什么这也不能真正解释这里发生了什么