只是想知道示例中的强制转换是否是多余的

时间:2011-06-15 12:05:14

标签: c

只想知道以下示例中的演员是否多余。

uint16_t basic_units = 4587U;

uint8_t int_val =(uint8_t)(((uint16_t)(basic_units * 5U))/ 1000U);

3 个答案:

答案 0 :(得分:2)

uint8_t演员表是多余的。如果uint16_t在被除以1000之前溢出正常basic_units * 5U,则uint16_t强制转换可能会产生截断计算中间值的(非)预期结果。

答案 1 :(得分:0)

我认为

中的(uint16_t)
  

(uint8_t)(((uint16_t)(basic_units *   5U))/ 1000U)

是多余的。

仅仅因为

  

Uint16_t是的同义词   “unsigned short”

  

uint8_t只是unsigned的typedef   炭

答案 2 :(得分:0)

请详细说明冗余部分。你要做的事情是一种不安全的做法,并且在进行缩短转换(将16位转换为8位)时非常不可取。

P.S 如果你写uint8_t int_val =(uint8_t)((basic_units * 5U)/ 1000U)就足够了;