C visualstudio中的Long-min限制
为什么Visual Studio将常量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
-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。这并不能真正解释这里发生了什么这也不能真正解释这里发生了什么