引言
当我们进行各种数学计算(四则运算,指数运算等)时,要时刻保持警惕,防止运算结果的溢出(上溢或下溢);当进行不同类型的数据混合运算时,要注意数据类型的提升或转换,避免精度丢失。
注:本文如无特别说明,示范代码均在 Win7 64位英文系统, Dev-C++ 4.9 环境下编译执行。
无符号整型在循环条件中造成死循环
示范代码
#include<stdio.h>
int main()
{
//unsigned int i = 10;
size_t i = 10;
while(i >= 0)
{
printf("%u\t", i);
i--; /* 当 i 为 0 时, i-- 操作导致下溢翻转,变成该整型所能表示的最大值而导致死循环 */
}
return 0;
}
错误分析
对于无符号整数类型(unsigned char, unsigned short , unsigned int, unsigned long 以及宏定义 size_t 等),执行自减操作就会下溢而翻转,变成该整型的最大值,从而导致死循环的发生。
避免这种错误最简单的方式就是不要用无符号整数执行自减运算时与 0 进行相等比较;或