0
点赞
收藏
分享

微信扫一扫

C++整形变量临界值问题思考


最近调试代码时,遇到了一个问题。

程序中定义了 int 类型的变量,在代码中做自增操作,当达到某一阈值(等于15)的时候,会做一些特殊处理。

实际测试发现,该阈值在特定场景,无论如何都达不到。

最后发现该变量为 int 类型,猜测很可能是远远超过 15 ,且已经变为负数了,导致无法快速的从 0 开始加到 15 。

于是想着一探究竟,看下变量在最大值时,再加一会发生什么。

代码如下

#include <iostream>

using namespace std;

int main()
{
int iCount = 0;
unsigned int uiCount = 0;

iCount = INT32_MAX; // 有符号数,加一,会变为负数
iCount += 1;
cout << "MAX:" << INT32_MAX << " iCount(MAX + 1) = " << iCount << endl;

uiCount = INT32_MAX;
uiCount += 1;
cout << "MAX:" << INT32_MAX << ", uiCount(MAX + 1) = " << uiCount << endl;

uiCount = UINT32_MAX; // 无符号数,加一,从0开始
uiCount += 1;
cout << "MAX:" << INT32_MAX << ", uiCount(MAX + 1) = " << uiCount << endl;


cout << "iCount = " << iCount << ", uiCount = " << uiCount << endl;

return 0;
}

实际测试结果如下

MAX:2147483647 iCount(MAX + 1) = -2147483648
MAX:2147483647, uiCount(MAX + 1) = 2147483648
MAX:2147483647, uiCount(MAX + 1) = 0
iCount = -2147483648, uiCount = 0

C++整形变量临界值问题思考_c++

对比可以发现

  • int :在最大值时加一,会变为最小值
  • unsigned int:在最大值时加一,会变为 0

后续在写代码时,应该明确变量类型,类似这种自增、自减的变量,一定要考虑是否有可能为负数。如果不会为负数,则应该从变量类型做限制,避免出现异常情况。


举报

相关推荐

0 条评论