如何在数学上将-9之类的数字从8位转换为4位?会转换成什么?有人可以带我走过吗?我试图用C来解决它。我目前的理解是有符号整数只能转到-8,像-9这样的数字如何从8转换为4位?
答案 0 :(得分:1)
您可以将值钳位(也称为饱和)到有效输出范围,或者只掩盖MS 4位,这有效地为超出范围的输入值提供模数环绕:
int8_t convert_8_to_4(int8_t x)
{
#if SATURATE // limit input range to -8 .. +7
x = min(x, 7);
x = max(x, -8);
#else
x &= 0x0f; // mask all but LS 4 bits
#endif
return x;
}
请注意,如果您尝试将全范围8位值减少到4位,那么只需将其除以16就可以实现,但显然您在执行此操作时会失去精度:
int8_t convert_8_to_4(int8_t x)
{
return x / 16; // lose 4 LS bits
}