- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要从定点符号 Q8 format 进行转换到定点签Q4 format在c。我假设我只能进行四位位移,这是正确的吗?我需要考虑符号位吗?
更新:这是针对 ARM11 架构的,但我更喜欢非架构特定的解决方案。
谢谢
最佳答案
位移位应该可以工作,并且还将处理许多体系结构上的符号位。如果是负数,将移入更多的位,但您要么只使用低 5 位,要么在 C 中进行算术运算,您需要这些额外的位来形成正确的二进制补码。
假设是整数,代码将简单地是:
int q4 = q8 >> 4;
也许你想四舍五入:
int ahalf = q8 >= 0 ? (1<<3) : (1<<3)-1;
int q4 = (q8+ahalf) >> 4;
好的,我听了 Oli 的意见并提出了一个解决方案,用于不正确转换符号的架构:
int q4 = q8 / (1<<4);
如果可能,优化器应将除法转换为移位。
通过舍入,第一个解决方案是
int ahalf = q8 >= 0 ? (1<<3) : -(1<<3);
int q4 = (q8+ahalf) / (1<<4);
感谢 R.. 的坚持,我终于测试了所有版本,现在它们在 Linux 下使用 Intel 32 位有符号整数产生了正确的结果。
关于定点符号 Q8 到 Q4 格式的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3864515/
当我在定点 Z3Py 中启用解释生成选项时,我收到包含以下消息的核心转储。 Error setting 'DL_GENERATE_EXPLANATIONS', reason: unknown opti
我正在开发一些代码,可以从 HW 获取浮点或定点数据。目前我们将其作为 float 。 底层API都是定点的。所以我们必须将数据作为定点传回。我们使用的算法是 Cholesky。我想知道为什么我们必须
我有一个关于在 MATLAB 中为 Texas Instruments TMS320C64xx DSP 编写算法的问题: 我在 MATLAB 中草率地实现了我的过滤器。我的目标是使用 MATLAB E
我需要将 float 转换为Q31定点,Q31表示1个符号位,0位表示整数部分,31位表示小数部分。这意味着 Q31 只能表示 [-1,0.9999] 范围内的数字。 根据定义,从浮点转换为定点时,会
我正在使用第 3 方定点 antilog() 函数来计算分贝 out_mag = 10^( in_db/20 ) 的幅度。 antilog() 采用 Q6.25 格式作为输入,并在输出时提供 Q16.
我想将一个定点数(Q31/int32 表示具有 31 个小数位的小数)除以另一个 Q31/int32。我想计算z = y/x,知道abs(x)>abs(y)。因此,z<1,因此可以表示为另一个Q31/
我是一名优秀的程序员,十分优秀!