首页 > 代码库 > 华摄氏度和摄氏度的转换 华摄氏度转化摄氏度 使用带运算的宏定义
华摄氏度和摄氏度的转换 华摄氏度转化摄氏度 使用带运算的宏定义
定义:
摄氏度:CELSIUS EQUALS
华氏度:FAHENHEIT EQUALS
彼此间的转换很容易,如下:
将摄氏度转成华氏度:将摄度以氏直接乘以9,除5,再加上32
华氏度转成摄氏度:将华氏度减去32,乘以5再除以9
写成公式:
CelEquVal --摄氏度
FahEquVal-- 华氏度
摄氏度转成华氏度:
FahEquVal = CelEquVal * 9 / 5 + 32;
华氏度转成摄氏度:
CelEquVal =(FahEquVal - 32) * 5 / 9;
公式看起来简单吧,但一步小心就掉陷阱了,哈哈。具体再看:
FahEquVal >= 32
摄氏度转成华氏度:
#define CelToFah(CelEquVal) (unsigned char )(CelEquVal * 9 / 5 + 32)
华氏度转成摄氏度:#define FahToCel(FahEquVal ) (unsigned char )((FahEquVal - 32) * 5 / 9)
看出问题了吗?伙伴们,这个问题有点隐蔽哦,再仔细瞧瞧。我的答案在底部,希望您能看出问题,然后就看看我的分析吧。嘻嘻。
这是我的分析了:
程序在运行 CelEquVal * 9 或者 (FahEquVal - 32) * 5 后,有可能溢出,即超出255了,因此,结果就不是我们想要的,知道为什么了吧。修改后没有BUG的写法:
摄氏度转成华氏度:
#define CelToFah(CelEquVal )(unsigned int )(CelEquVal * 9 / 5 + 32)
华氏度转成摄氏度:#define FahToCel(FahEquVal )(unsigned int)((FahEquVal - 32) * 5 / 9)