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

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

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);

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

发表评论

邮箱地址不会被公开。 必填项已用*标注