首页 > 代码库 > 华摄氏度和摄氏度的转换 华摄氏度转化摄氏度 使用带运算的宏定义

华摄氏度和摄氏度的转换 华摄氏度转化摄氏度 使用带运算的宏定义

定义:

        摄氏度: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)