最近调试代码时,遇到了一个问题。
程序中定义了 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;
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
后续在写代码时,应该明确变量类型,类似这种自增、自减的变量,一定要考虑是否有可能为负数。如果不会为负数,则应该从变量类型做限制,避免出现异常情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)