我不太确定正确的强制转换,特别是来自unsigned int和#defines(无论是什么类型)要加倍。
在这个例子中
#define SPEEDSENSOR_EDGES_NUM 10
int speed_counter_left;
double result = speed_counter_left / SPEEDSENSOR_EDGES_NUM;
当speed_counter_left为<
所以我加入了一些演员阵容:
double result = (double) ((double) speed_counter_left / (double) SPEEDSENSOR_EDGES_NUM);
这是正确的,但我认为有太多演员阵容。如何用最少的演员表找出正确的方法?
答案 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
整数常量的类型是相应列表的第一个 其值可以表示。
(对于没有后缀的十进制常量),列表为:int
,long int
,long 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;