在进行乘法运算时要注意可能的溢出

在进行乘法运算时常常会忽略数据溢出的问题,看下面的代码:

1
2
3
4
5
 uint32_t Tmp_HH = 0xFF, Tmp_MM = 0xFF, Tmp_SS = 0xFF;
 char* ptr;
 Tmp_HH == (*(ptr+0))*10 + *(ptr+1);
 Tmp_MM == *(ptr+2)*10 + *(ptr+3);
 Tmp_SS == *(ptr+4)*10 + *(ptr+5);

 很明显在乘10的运算中就有数据溢出的可能,正确的做法应该是:

1
2
3
 Tmp_HH = *(ptr+0);Tmp_HH *= 10;Tmp_HH += *(ptr+1);
 Tmp_MM = *(ptr+2);Tmp_MM *= 10;Tmp_MM += *(ptr+3);
 Tmp_SS = *(ptr+4);Tmp_SS *= 10;Tmp_SS += *(ptr+5);

虽然在此处用来计算时分秒不会溢出,但是也应该考虑这个问题。

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/%e5%9c%a8%e8%bf%9b%e8%a1%8c%e4%b9%98%e6%b3%95%e8%bf%90%e7%ae%97%e6%97%b6%e8%a6%81%e6%b3%a8%e6%84%8f%e5%8f%af%e8%83%bd%e7%9a%84%e6%ba%a2%e5%87%ba/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名