Q格式
目录
Q格式
Q 表示法是一种指定二进制定点数格式参数的方法。 例如,在Q表示法中,用Q8.8表示的数字格式表示这种格式的定点数有8位整数部分和8位小数部分。
许多其他符号已用于同一目的。
定义
德州仪器版本
Q 表示法由德州仪器定义,由字母 Q 后跟一对数字 m.n 组成,其中 m 是用于值的整数部分的位数,n 是小数位数。
默认情况下,该符号描述带符号的二进制定点格式,未缩放的整数以二进制补码格式存储,用于大多数二进制处理器。 xxx位总是给出值的符号(1 = 负数,0 = 非负数),并且不计入 m 参数。 因此,使用的总位数 w 是 1 + m + n。
例如Q3.12规范描述了一个w=16位的有符号二进制定点数,包括符号位,整数部分的3位,小数部分的12位。 即,一个 16 位有符号(二进制补码)整数,隐式乘以比例因子 2−12
特别是,当 n 为零时,数字只是整数。 如果 m 为零,则除符号位外的所有位都是小数位; 那么存储的数字的范围是从-1.0(含)到+1(不含)。
m 和点可以省略,在这种情况下,它们是从存储值的变量或寄存器的大小推断出来的。 因此 Q12 表示具有任意位数的带符号整数,它隐式乘以 2−12。
字母 U 可以作为 Q 的前缀以表示无符号二进制定点格式。 例如,UQ1.15 将值描述为无符号 16 位整数,隐式比例因子为 2−15,范围从 0.0 到 (216−1)/215 = +1.999969482421875。
ARM版
Q 表示法的一种变体已被 ARM 使用。 在这个变体中,第 m 个数字包括符号位。 例如,一个 16 位有符号整数在 TI 变体中表示为 Q15.0,而在 ARM 变体中表示为 Q16.0。
特点
Qm.n 或 UQm.n 格式的分辨率(连续值之间的差异)始终为 2−n。 可表示值的范围取决于所使用的符号:
例如,Q15.1 格式数字需要 15+1 = 16 位,分辨率为 2−1 = 0.5,可表示的值范围为 −214 = −16384.0 到 +214 − 2−1 = +16383.5。 在十六进制中,负值范围从 0x8000 到 0xFFFF,然后是从 0x0000 到 0x7FFF 的非负值。
数xxx算
Q 数是两个整数的比率:分子保存在存储器中,分母 d {displaystyle d} 等于 2n。
考虑以下示例:
- Q8 的分母等于 28 = 256
- 1.5 等于 384/256
- 存储 384,推断 256,因为它是 Q8 数。
如果要保持 Q 数的底数(n 保持不变),Q 数数xxx算必须保持分母 d 不变。 以下公式显示了对一般 Q 数 N 1和 N 2 的数xxx算。
因为分母是2的幂,所以乘法可以实现为算术左移,除法可以实现为算术右移; 在许多处理器上,移位比乘法和除法更快。
为了保持准确性,中间乘法和除法结果必须是双精度的,并且在转换回所需的 Q 数之前必须小心舍入中间结果。

使用 C 的操作是(请注意,此处 Q 指的是小数部分的位数):
加法
随着饱和度
与浮点 ±Inf 不同,饱和结果不粘,并且在将负值添加到正饱和值 (0x7FFF) 时会不饱和,反之亦然,在所示的实现中。