正确的C演员

时间:2012-06-03 11:41:27

标签: c casting

我不太确定正确的强制转换,特别是来自unsigned int和#defines(无论是什么类型)要加倍。

在这个例子中

#define SPEEDSENSOR_EDGES_NUM 10

int speed_counter_left;

double result = speed_counter_left / SPEEDSENSOR_EDGES_NUM;

当speed_counter_left为< 时,结果始终为0 10.

所以我加入了一些演员阵容:

double result = (double) ((double) speed_counter_left / (double) SPEEDSENSOR_EDGES_NUM);

这是正确的,但我认为有太多演员阵容。如何用最少的演员表找出正确的方法?

2 个答案:

答案 0 :(得分:6)

拥有一个double操作数就足够了:

double result = (double)speed_counter_left / SPEEDSENSOR_EDGES_NUM;

最接近speed_counter_left的演员“坚持”。所以它基本上等同于:

double result = ((double)speed_counter_left) / SPEEDSENSOR_EDGES_NUM;

  

和#defines(无论什么类型)要加倍。

标准说:

  

6.4.4.1 - 5

     

整数常量的类型是相应列表的第一个   其值可以表示。

(对于没有后缀的十进制常量),列表为:intlong intlong long int

答案 1 :(得分:0)

无需强制转换,使用SPEEDSENSOR_EDGES_NUM代替double使10.0成为10

#define SPEEDSENSOR_EDGES_NUM 10.0

int speed_counter_left;

double result = speed_counter_left / SPEEDSENSOR_EDGES_NUM;