在C中进行8位到4位整数转换,将signed int转换为-8?

时间:2015-10-06 12:04:10

标签: c binary integer bits data-conversion

如何在数学上将-9之类的数字从8位转换为4位?会转换成什么?有人可以带我走过吗?我试图用C来解决它。我目前的理解是有符号整数只能转到-8,像-9这样的数字如何从8转换为4位?

1 个答案:

答案 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
}