C语言 int数据类型的取值范围

zslin2011 2013-01-07 08:45:53
我们知道,一般情况下,int数据类型占用4字节的内存空间,取值范围:-2147483648 ~ 2147483647
int数据类型的下限是-2147483648,上限是2147483647。

int m = 2147483647;GCC编译器编译正常;而int m = -2147483648;GCC编译器编译警告
tester.c: In function 'main':
tester.c:5:5: warning: this decimal constant is unsigned only in ISO C90 [enabled by default]
为什么???

unsigned int是无符号整型,而int m = -2147483648U;GCC编译器编译正常,为什么??
...全文
1257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2013-01-08
  • 打赏
  • 举报
回复
short溢出了(超出范围)就是int,int溢出了就是unsigned int,再溢出就是long。
kndyc 2013-01-08
  • 打赏
  • 举报
回复
编译器在解析-2147483648时,会先将执行2147483648,然后再取反码,2147483648已经超出了int范围,写成-2147483647-1就没问题了,推荐一本书,《深入理解计算机系统》,里面有解释的。int m = -2147483648U其实就是0x80000000,这个不用解释了吧。
AnYidan 2013-01-08
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
看limits.h的内容。
与实现相关, c 只规定 int 不能小于 16-bit
赵4老师 2013-01-08
  • 打赏
  • 举报
回复
看limits.h的内容。
abc41106 2013-01-07
  • 打赏
  • 举报
回复
Gonefar 2013-01-07
  • 打赏
  • 举报
回复
int m = -2147483648; 我用这个在linux环境下可以正常编译,不会有警告。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧