如何将整数或浮点数转换为S16.16定点格式
How to convert integer or float to S16.16 fixed point format
我的问题是关于如何将整数或浮点数转换为 S16.16 格式。
我正在阅读一些代码,说将整数或浮点数转换为 S16.16 格式可以通过乘以 2^16 对齐零点来实现。
这是否正确,有人可以解释一下它是如何工作的吗?
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
我的问题是关于如何将整数或浮点数转换为 S16.16 格式。
我正在阅读一些代码,说将整数或浮点数转换为 S16.16 格式可以通过乘以 2^16 对齐零点来实现。
这是否正确,有人可以解释一下它是如何工作的吗?
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