【C/C++】为什么INT_MAX(整形最大值)减去INT_MIN(整形最小值)等于-1

#include <iostream>
#include <limits.h>
using namespace std;
int main()
{
	cout<<INT_MAX-INT_MIN<<endl;//输出-1
	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表示第二小负数,依次递增。
  • 如果放在数轴上就形成了一个环:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值