【问题标题】:How to convert integer or float to S16.16 fixed point format如何将整数或浮点数转换为 S16.16 定点格式
【发布时间】:2020-07-21 12:08:15
【问题描述】:

我的问题是关于如何将整数或浮点数转换为 S16.16 格式。

我正在阅读一些代码,说将整数或浮点数转换为 S16.16 格式可以通过乘以 2^16 来对齐零点。

这是正确的吗?有人可以解释一下它是如何工作的吗?

【问题讨论】:

    标签: integer fixed-point


    【解决方案1】:

    S16.16 中的“.16”表示最低 16 位实际上在小数点之后。例如:(有趣的符号表示“对应”)

    0x00010000 ≘ 1.0
      ^^^^
      the whole number part
    0x00028000 ≘ 2.5
    0x0003C000 ≘ 3.75
          ^^^^
          the part after the radix point
    

    或者换句话说,原始值的解释方式为: value = raw / 216

    为了将正常值转换为该格式,我们需要乘以 216(这会与隐式除法相抵消)。

    例子:

    1 << 16 = 0x00010000 ≘ 1.0
    int(3.75 * pow(2.0, 16)) = int(245760.0) = 0x0003C000 ≘ 3.75
    

    【讨论】:

      猜你喜欢
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多