c语言 数据类型转换 数据溢出了,C语言陷阱---数据溢出和类型转换

引言

当我们进行各种数学计算(四则运算,指数运算等)时,要时刻保持警惕,防止运算结果的溢出(上溢或下溢);当进行不同类型的数据混合运算时,要注意数据类型的提升或转换,避免精度丢失。

注:本文如无特别说明,示范代码均在 Win7 64位英文系统, Dev-C++  4.9 环境下编译执行。

无符号整型在循环条件中造成死循环

示范代码

#include

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 进行相等比较;或者避免使用无符号整型进行此类操作。对于示范代码,将 ”size_t“  改成 ”int", 或者修改 “ while(i >= 0)" 为 " while(i > 0)"的判断(当然判断条件的意思也变了)。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值