#include <iostream>
#include <limits.h>
using namespace std;
int main()
{
cout<<INT_MAX-INT_MIN<<endl;
return 0;
}
- 首先INT_MAX是int所能够正确存储的最大整形,是一个很大的正整数
- INT_MIN是int所能够正确存储的最小整形,是一个很小的负整数。
- 所以很大的正整数减去很小的负整数,将会是一个比INT_MAX还要大的正整数,而int所能正常存储的最大整数是INT_MAX,所以相减后的结果肯定不能正常存储,也就是说会发生溢出,最终导致结果为-1。
- 强烈建议首先看下我的这篇文章,便于理解下面的内容。
int是4字节32位,它能够保存的最大正整数二进制形式如下:
011111........1
(31个1)
它所能够保存的最小负整数如下:
10000..........0
(31个0)
两者相减以后,最左边0-1发生溢出,结果为1,所以最终相减的结果变为:
111..............
(32个1)。
而按照补码的方式计算,改结果等于1。 - 总结:计算机中整形数的表示可以这样记忆,从0开始
00000.......1
表示1,000000.......10
表示2,依次递增,直到01111111......1111
表示最大的正数。最大蒸熟在加一就成了1000000......0000
表示最小负数,10000000........01
表示第二小负数,依次递增。 - 如果放在数轴上就形成了一个环: