今天写代码的时候遇到这样一种情况:
首先我能获取到一个配置的电压信息,类型是UINT8
然后我要用当前的实际电压与配置的电压进行比较,
问题是 我获取到的配置电压单位是0.1V,当前实际电压单位是0.01V
所以工需要将我获取到的配置电压 乘以 10,再和实际电压进行比较,
我是这样写的:
if(CurrentV < (ConfigV * 10))/* ConfigV :配置电压 CurrentV :实际电压 */
{
...
}
那么问题就来了,我的ConfigV 的类型是UINT8,随随便便给它做了*10的操作,会不会溢出呢?
不知道。
实际写代码测试了一下,代码如下:
int main(void)
{
unsigned char a = 222;
unsigned short b = 0;
b = a * 10;
printf("b:%d\r\n", b);
if(b > a * 10)
{
printf("b > a * 10; overflow!!\r\n");
}
else
{
printf("b <= a * 10; \r\n");
}
return 0;
}
结果如下:
所以这能证明真的没有问题吗?感觉并不能
好吧