关于C标准库limits.h中INT_MIN的定义

xuanqing 2012-09-03 10:44:12
在C标准库limits.h中定义INT_INT如下:

# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647

为什么不这样定义,原因是什么?

# define INT_MIN -2147483648

在看《深入理解计算机系统》的时候看到了这个问题,但书上也没说什么原因,请知道的朋友解答一下,谢谢!
...全文
365 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljhhh0123 2012-09-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

就是让最大值和最小是有关系。
[/Quote]
++
就是这个关系。
xspace_time 2012-09-05
  • 打赏
  • 举报
回复
就是char *p和string str的区别
xuanqing 2012-09-05
  • 打赏
  • 举报
回复
查到了一篇文章http://www.hardtoc.com/archives/119
文章中说到,-2147483648是一个常量表达式,而不是一个常量。所以-2147483648被解释为一个‘-’号和一个常量值2147483648。而对于没有后缀的常量,匹配的顺序如下:
C89: int, long int, unsigned long int
C99: int, long int, long long int
由于2147483648超过了有符号常量的表示范围,所以类型变成了unsigned long int 或 long long int,而写成-2147483647 - 1则可以精确的表示成32位有符号整数的最小形式。
sanshao_ye 2012-09-04
  • 打赏
  • 举报
回复
就是让最大值和最小是有关系。
sanshao_ye 2012-09-04
  • 打赏
  • 举报
回复
感觉就是让最大值和最小值有关系吧。
sanshao_ye 2012-09-04
  • 打赏
  • 举报
回复
感觉就是让最大值和最小值有关系吧。
mujiok2003 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
在C标准库limits.h中定义INT_INT如下:
C/C++ code

# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647


为什么不这样定义,原因是什么?
C/C++ code

# define INT_MIN -2147483648


在看《深入理解计算机系统》……
[/Quote]

少点Magic Number.
AnYidan 2012-09-04
  • 打赏
  • 举报
回复
先后顺序是否反了
xuanqing 2012-09-03
  • 打赏
  • 举报
回复
上面的是GNU的实现,而微软的实现如下:

#define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX 2147483647 /* maximum (signed) int value */

这个实现,INT_MIN并没有用INT_MAX这个宏,似乎不是这个原因。

[Quote=引用 1 楼 的回复:]

C/C++ code

# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647


这个说明INT_MAX和INT_MIN是有关系的,而你的那种写法看不出。如果INT_MAX改变了成了127,那你的最小值还是-2147483648,而上述写法则会自动变成-128
[/Quote]
Corner 2012-09-03
  • 打赏
  • 举报
回复

# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647

这个说明INT_MAX和INT_MIN是有关系的,而你的那种写法看不出。如果INT_MAX改变了成了127,那你的最小值还是-2147483648,而上述写法则会自动变成-128
qq120848369 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

我的意思是为什么不直接定义为
C/C++ code

# define INT_MIN -2147483648


引用 3 楼 的回复:

人家愿意用宏, 没什么特殊的意思.
[/Quote]

因为原意是溢出到最小负数, 你却非要明确的指定
xuanqing 2012-09-03
  • 打赏
  • 举报
回复
我的意思是为什么不直接定义为

# define INT_MIN -2147483648

[Quote=引用 3 楼 的回复:]

人家愿意用宏, 没什么特殊的意思.
[/Quote]
qq120848369 2012-09-03
  • 打赏
  • 举报
回复
人家愿意用宏, 没什么特殊的意思.

69,371

社区成员

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

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