C语言的limits.h文件

我们知道在C语言的signed int类型在32位编译器下占据4字节,即32位。范围是从2^31——2^31 - 1。unsigned int也是占据32位,范围是从0——2^32 - 1。字面常量2147483648被编译器认为是unsigned long(C99标准把除了unsigned char以外的所有的无符号整形统一为了unsigned long)我们可以看到limits.h头文件里面的INT_MIN被定义为了 (-2147483647 - 1),而不是-21474836478。这两者差别是非常巨大的。-21474836478是分阶段处理的,但是处理之后仍然是无符号类型。

但是INT_MIN被宏定义为#define INT_MIN     (-2147483647 - 1),意味着做完这些操作以后,该类型仍然是signed int。

这是微软官方给出的解释,因此我们使用最小整数最好是使用limits.h里面的INT_MIN。

但是GCC给出的结果和VS2017是不一样的,GCC可以编译通过,但是判断出的值为假。看来VS果真是宇宙第一IDE啊!它能尽可能的避免一些错误。当然,也由衷的佩服微软做的文档,这个真的是无法挑剔。

原文地址:https://www.cnblogs.com/zy666/p/10504310.html