只想知道以下示例中的演员是否多余。
uint16_t basic_units = 4587U;
uint8_t int_val =(uint8_t)(((uint16_t)(basic_units * 5U))/ 1000U);
答案 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)就足够了;