Why “auto x = -2147483648;” sets x to unsigned long type not to int type? (VS2017)
本问题已经有最佳答案,请猛点这里访问。
1 2 | auto x = -2147483648; // (unsigned long) auto y = -2147483647; // (int) |
在C语言中,int类型的范围是" -2,147,483,648?2,147,483,647"。
我认为-2147483648可以表示为int类型,但可以表示为无符号long。 此外,-2147483648在无符号长类型的范围之外。
为什么...?
(我正在使用Visual Studio 2017)
编辑!
哇。 我读了评论,我意识到我的问题应该更精确。
1)是的,在C ++语言中不是在C语言中。 (抱歉)
2)int类型范围? :https://msdn.microsoft.com/en-us/library/s3f49ktz.aspx
INT_MIN在limits.h中定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // // limits.h // // Copyright (c) Microsoft Corporation. All rights reserved. // // The C Standard Library <limits.h> header. // #define SHRT_MIN (-32768) // minimum (signed) short value #define SHRT_MAX 32767 // maximum (signed) short value #define USHRT_MAX 0xffff // maximum unsigned short value #define INT_MIN (-2147483647 - 1) // minimum (signed) int value #define INT_MAX 2147483647 // maximum (signed) int value #define UINT_MAX 0xffffffff // maximum unsigned int value #define LONG_MIN (-2147483647L - 1) // minimum (signed) long value #define LONG_MAX 2147483647L // maximum (signed) long value #define ULONG_MAX 0xffffffffUL // maximum unsigned long value #define LLONG_MAX 9223372036854775807i64 // maximum signed long long int value #define LLONG_MIN (-9223372036854775807i64 - 1) // minimum signed long long int value #define ULLONG_MAX 0xffffffffffffffffui64 // maximum unsigned long long int value |
C中没有自动类型推断。没有类型说明符的Lone
样品1
样品2
如果您的工具告诉您
请注意,此问题是在用C标签标记问题并且未提及C ++时编写的。
我找到了答案。
为什么最小的int?2147483648具有长型?
答案说明