问题描述
|
只想知道下面示例中的演员表是否多余。
uint16_t basic_units = 4587U;
uint8_t int_val =(uint8_t)((((uint16_t)(basic_units * 5U))/ 1000U);
解决方法
“ 0”强制转换是多余的。如果
basic_units * 5U
在除以1000之前会溢出正常的ѭ1overflow,则在计算中将uint16_t
强制转换会产生中间结果的(意外)结果。
, 我认为(uint16_t)在
(uint8_t)((((uint16_t)(basic_units *
5U))/ 1000U)
是多余的。
仅仅是因为
Uint16_t是以下内容的同义词
\“无符号短裤\”
和
uint8_t只是unsigned的typedef
烧焦
, 您能否详细说明冗余部分。您尝试做的是一种不安全的做法,并且在进行缩短转换(将16位转换为8位)时非常不建议这样做。
压力
如果您编写uint8_t int_val =(uint8_t)((basic_units * 5U)/ 1000U)就足够了;