int 为什么是2147483647_为什么宏INT_MIN要写成-2147483647-1
《深入理解计算机系统》在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相关推荐
- 宏定义是写在.h文件里还是.c文件里
宏定义是写在.h文件里还是.c文件里? 1.不管是定义在.h文件还会.c文件,程序都会正常运行. 2.如果.h中不需要用到的宏,都定义到.c里,因为等一个工程里需要include多个.h的时候,你在. ...
- ppt录制宏_Word中录制宏,学会后成大神
Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...
- Word中录制宏,学会后成大神
Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...
- .验证哥德巴赫猜想,哥德巴赫猜想的内容是:任何一个大于2的偶数都能写成写成两个素数和的形式。 设计一个函数 int isPrime(int n)判断n是否为素数,如果n是素数,函数返回值1,否则返
.验证哥德巴赫猜想,哥德巴赫猜想的内容是:任何一个大于2的偶数都能写成写成两个素数和的形式. 设计一个函数 int isPrime(int n)判断n是否为素数,如果n是素数,函数返回值1,否则返回0 ...
- int 为什么是2147483647_现在的C语言编辑器里的int范围为什么是-2147483648~2147483647...
下面是引用百度文库的一段话: "这得从二进制的原码说起: 如果以最高位为符号位,二进制原码最大为0111111111111111=215-1=32767 最小为111111111111111 ...
- int 为什么是2147483647_「2147483647」当int类型超出了[-2147483648,2147483647]会发生什么? - seo实验室...
2147483647 当int超超出范围,编译器会报错吧?.... 答案是不会(看编译器怎么处理),在vs环境中,当输入下面的代码: int a = 2147483647; int b = 21474 ...
- 【C++】为什么INT_MIN不是直接写成-2147483648(转载)
最近在编程中遇到一个问题: #include <iostream>using namespace std;int main() { int n = -2147483648;//cout & ...
- 为什么INT_MIN不是直接写成-2147483648
今天在看<深入理解计算机系统>的时候,在p105页作者给出了INT_MIN在标准头文件limits.h中的定义 #define INT_MAX 2147483647 #define INT ...
- word文档批量选中图片宏代码怎么写?
以下是 Word 文档中批量选中图片的 VBA 宏代码: Sub SelectAllPictures()Dim oShape As ShapeFor Each oShape In ActiveDocu ...
最新文章
- 解禁策略组、注册表、各种应用程序、控制面板、运行、USB
- 小而美的个人博客——前端——tags
- Scala集合:ListBuffer可变集合的head/tail/last/init方法
- Spring Boot (1) 构建第一个Spring Boot工程
- VM虚拟机显示不能铺满问题
- HDU 5934:Boom——强连通分量+缩点
- HDU 2544最短路dijkstra模板题
- soapUI-JDBC Request
- 【hdu3294】Girls' research
- python线性规划教程_python 利用cvxopt线性规划
- 小程序绘制之CanvasContext
- 配置Apache Httpd Server 2.2 Virtual Host UrlRewrite
- Django2.2中Xadmin错误集
- excel单元格内加空格_Excel基础知识,你懂多少?
- linux yum被占用
- R语言wmf矢量图片导出大片空白及搜索网站
- HTML中的单行注释标签是,html如何单行和多行注释呢 ?
- [leetcode]322. 零钱兑换(Coin Change )C++代码实现
- Virtual host / experienced an error on node rabbit@XX and may be inaccessible
- 风险管理中的风险预测、风险评估、风险控制