【问题标题】:8-bit to 4-bit integer conversion in C, converting signed int past -8?C中的8位到4位整数转换,将带符号的整数转换为-8?
【发布时间】:2016-01-03 08:14:08
【问题描述】:

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

【问题讨论】:

  • 域:整数的集合。范围:大小为 16 的有限集。您要的是某种神奇的“规范”函数吗?它应该具备哪些属性?为什么任何一种选择都比其他选择更好?

标签: c binary integer bits data-conversion


【解决方案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
}

【讨论】:

  • 有趣,我想我明白当时发生了什么。所以基本上它会计算 -9 模 16。
  • 其实我刚刚更新了答案(见上文),但是是的,如果你不限制输入范围,那么 -9 将变为 +7。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
相关资源
最近更新 更多