itoa函数,考虑当待处理整数为-2^(字长-1)的情况

     源自《The C Programming Language》 P53 pr3-4:

 

     在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-(2^(字长-1))的情况。请解释原因,

     修改函数使得它在任意机器上运行时都能得到正确结果。

 

     代码:

     

     分析:

 

     1,  原因:对于整数的对二补码表示中,所能表示的最大整数值为2^(字长-1) - 1,故不能通过n = -n;

                   将-(2^(字长-1))转化为2^(字长-1),而是通过abs宏取绝对值的方法abs(n % 10)得到,

                   比如n = -2147483648(即-(2^(字长-1)),通过abs(n % 10)得到8,这样就绕过了上述

                   的问题。

 

     2,  参考代码的重点:

                   (a):用abs(n % 10)而非n = -n来规避当n为最小整数(-2147483648)时。

                   (b):do-while循环的判断条件用((n / 10) != 0)而非((n / 10) > 0)来避免当n是个负数时

                           使itoa函数陷入无限循环汇总。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值