如何将 int32t_t 转换为 int16_t(msb) 和 uint16_t(Lsb)?不改变原值

问题描述


int32_t value32bit = somevalue;
int16_t high16 = value32bit >> 16;
uint16_t low16 = value32bit & 0xFFFF;
int32_t rebuild = (high16 << 16) | (low16 & 0xFFFF);

这对负值也能起作用吗?

解决方法

int32_t value32bit = static_cast(value); 这一步正在失去精度。 您应该确保左移以保留所有有效位,即小数部分。