INT_MAX (2147483647) 和INT_MIN (-2147483648)溢出

Posted Hahallo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了INT_MAX (2147483647) 和INT_MIN (-2147483648)溢出相关的知识,希望对你有一定的参考价值。

c语言中32位int型数据在运算的时候可能会出现溢出的情况,如:

-2147483648-1会得到什么结果?

-2147483648乘(-1)会得到什么结果?

2147483647+1会得到什么结果?

 

在编译器中运行一下得到的结果分别是:

-2147483648-1=2147483647;

-2147483648乘(-1)=2147483647

2147483647+1=-2147483648

 

下面解释出现这几个情况的原因:

①-2147483648的二进制表示为1000 0000 0000 0000 0000 0000 0000 0000,a-1=1000 0000 0000 0000 0000 0000 0000 0000+FFFFFFFF

很明显,这里会溢出,结果将变为7FFFFFFFF,用int表示就是2147483647。

②-2147483648*(-1),对-2147483648按位取反,得到7FFFFFFF就是2147483647。

③2147483647的二进制表示为7FFFFFFF,加1之后就变为了80000000,结果就是-2147483648。

以上是关于INT_MAX (2147483647) 和INT_MIN (-2147483648)溢出的主要内容,如果未能解决你的问题,请参考以下文章

将 INT_MAX 转换为浮点数,然后再转换回整数。

是否有一种可移植的方式来定义 INT_MAX?

C++ 从 istream 读取 int,检测溢出

转换字符串到整数

剑指offer模拟题67.把字符串转换成整数

剑指offer模拟题67.把字符串转换成整数