《深入理解计算机系统》在P105页,作者给出了INT_MIN在标准头文件limits.h中的定义#define INT_MAX 2147483647

#define INT_MIN (-INT_MAX - 1)

文中说,-2147483648是一个常量表达式,而不是一个常量。所以-2147483648被理解为一个“-”号和一个常量值2147483648。对于“-”,是对原值补码进行“取反加1”操作。

对于没有后缀的常量,计算机匹配顺序为:

C98 : int, long int, unsigned long int

C99: int, long int, long long int

由于2147483648超出了有符号常量的表示范围,所以变成了unsigned int或long int,而写成-2147483647 - 1则可以精确的表示成为32位有符号整数的最小值。

因此若将INT_MIN声明为

#define INT_MIN -2147483648

那么因为整型的范围时-2147483648~2147483647

由于-2147483648是常量表达式,其中2147483648超出了int的表示范围,故调用unsigned int类型,即为:

10000000 00000000 00000000 00000000 :无符号型,表示正数2147483648

则-2147483648,即对上式取反+1,为:

01111111 11111111 11111111 11111111

+ 00000000 00000000 00000000 00000001

= 10000000 00000000 00000000 00000000 :无符型,值2147483648

所以最后INT_MIN的值就是unsigned int 2147483648

或者会将int扩展成为long int类型,该类型是64位,可以表示-2147483648

这样就与定义的int类型不符合

所以才这样定义宏#define INT_MAX 2147483647

#define INT_MIN (-INT_MAX - 1)

int 为什么是2147483647_为什么宏INT_MIN要写成-2147483647-1相关推荐

  1. 宏定义是写在.h文件里还是.c文件里

    宏定义是写在.h文件里还是.c文件里? 1.不管是定义在.h文件还会.c文件,程序都会正常运行. 2.如果.h中不需要用到的宏,都定义到.c里,因为等一个工程里需要include多个.h的时候,你在. ...

  2. ppt录制宏_Word中录制宏,学会后成大神

    Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...

  3. Word中录制宏,学会后成大神

    Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...

  4. .验证哥德巴赫猜想,哥德巴赫猜想的内容是:任何一个大于2的偶数都能写成写成两个素数和的形式。 设计一个函数 int isPrime(int n)判断n是否为素数,如果n是素数,函数返回值1,否则返

    .验证哥德巴赫猜想,哥德巴赫猜想的内容是:任何一个大于2的偶数都能写成写成两个素数和的形式. 设计一个函数 int isPrime(int n)判断n是否为素数,如果n是素数,函数返回值1,否则返回0 ...

  5. int 为什么是2147483647_现在的C语言编辑器里的int范围为什么是-2147483648~2147483647...

    下面是引用百度文库的一段话: "这得从二进制的原码说起: 如果以最高位为符号位,二进制原码最大为0111111111111111=215-1=32767 最小为111111111111111 ...

  6. int 为什么是2147483647_「2147483647」当int类型超出了[-2147483648,2147483647]会发生什么? - seo实验室...

    2147483647 当int超超出范围,编译器会报错吧?.... 答案是不会(看编译器怎么处理),在vs环境中,当输入下面的代码: int a = 2147483647; int b = 21474 ...

  7. 【C++】为什么INT_MIN不是直接写成-2147483648(转载)

    最近在编程中遇到一个问题: #include <iostream>using namespace std;int main() { int n = -2147483648;//cout & ...

  8. 为什么INT_MIN不是直接写成-2147483648

    今天在看<深入理解计算机系统>的时候,在p105页作者给出了INT_MIN在标准头文件limits.h中的定义 #define INT_MAX 2147483647 #define INT ...

  9. word文档批量选中图片宏代码怎么写?

    以下是 Word 文档中批量选中图片的 VBA 宏代码: Sub SelectAllPictures()Dim oShape As ShapeFor Each oShape In ActiveDocu ...

最新文章

  1. 解禁策略组、注册表、各种应用程序、控制面板、运行、USB
  2. 小而美的个人博客——前端——tags
  3. Scala集合:ListBuffer可变集合的head/tail/last/init方法
  4. Spring Boot (1) 构建第一个Spring Boot工程
  5. VM虚拟机显示不能铺满问题
  6. HDU 5934:Boom——强连通分量+缩点
  7. HDU 2544最短路dijkstra模板题
  8. soapUI-JDBC Request
  9. 【hdu3294】Girls' research
  10. python线性规划教程_python 利用cvxopt线性规划
  11. 小程序绘制之CanvasContext
  12. 配置Apache Httpd Server 2.2 Virtual Host UrlRewrite
  13. Django2.2中Xadmin错误集
  14. excel单元格内加空格_Excel基础知识,你懂多少?
  15. linux yum被占用
  16. R语言wmf矢量图片导出大片空白及搜索网站
  17. HTML中的单行注释标签是,html如何单行和多行注释呢 ?
  18. [leetcode]322. 零钱兑换(Coin Change )C++代码实现
  19. Virtual host / experienced an error on node rabbit@XX and may be inaccessible
  20. 风险管理中的风险预测、风险评估、风险控制

热门文章

  1. Python 服务器监控
  2. php如何实现发送邮件
  3. java中判断string类型的值_java判断对象是否是string类型
  4. ERP售前顾问形象寓意
  5. 数据库服务器物理架构,DM7 达梦数据库 物理结构 说明
  6. windows C盘下文件解析
  7. 哈佛结构与冯.诺依曼结构(普林斯顿结构)
  8. gdb和arm-linux-gdb命令详解
  9. python批处理将图片进行放大
  10. VS2008正式版序列号