-2147483648是不是int常量

32位int的表示范围为:

-2147483648 ~ 2147483647 


但查看VS 2008的头文件有如下定义:

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


为什么不直接定义为:-2147483648呢?

同时我在一本C语言的书中看到,只有在int范围内的全部由数字组成的值才是int常量。换而言之,0和所有的负整数都不能称为常量,因为它相当于对常量进行了取负运算,按书中的说法,是表达式。

首先用如下代码进行验证:

	cout << typeid(-2147483647-1).name() << endl;
	cout << typeid(-2147483648).name() << endl;

运行结果如下:

int
unsigned long


果然,-2147483648不同于-2147483647-1。


那我们是不是可以这样理解,对编译器而言,它首先看到的是正整数2147483648,然后再对其进行求负运算。由于2147483648超出了int的范围,所以-2147483648也不是int类型了。这也是系统头文件中不直接这样定义INT_MIN的原因吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值