c语言limits.h的作用,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是分阶段处理的,但是处理之后仍然是无符号类型。

999d3be0e3b8aa122343f40f3563df43.png

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

dccb346facba9d57c91c33ae39e78230.png

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

fa64e1d228273de7fe39523cc677112b.png

1ce5a87de23408d473dd5aee9d748da0.png

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

本文同步分享在 博客“zy010101”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值