C++整形变量临界值问题思考
Posted FightingBoom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
对比可以发现
- int :在最大值时加一,会变为最小值
- unsigned int:在最大值时加一,会变为 0
后续在写代码时,应该明确变量类型,类似这种自增、自减的变量,一定要考虑是否有可能为负数。如果不会为负数,则应该从变量类型做限制,避免出现异常情况。
以上是关于C++整形变量临界值问题思考的主要内容,如果未能解决你的问题,请参考以下文章