Q10 格式如何?

How is this in Q10 format?

我刚刚读了别人的代码,它声称答案是 Q10 格式的。我无法弄清楚 Q10 中的情况。这是代码:

// Convert x and y in such a manner that the ratio of x to y would
// produce a value in a Q10 format
cnt = 0;
bitMask = 0x80000000;

while((cnt < 10) && !(bitMask & x))
{
  x <<= 1;
  cnt++;
}
y >>= (10 - cnt);

// Calculate the slope
if (0 == x)
  slope = 0xFFFFFFFF;
else
  slope = ((uint32)x)/(uint32)y;

感谢任何帮助

我假设 Q10 是指该值有 10 位表示定点值的小数部分。如果 xy 输入具有相同数量的小数位(即相同的 "Q" 值),问题中的代码将产生 Q10 值。输入 x 最多向左移动 10 位,这会将 x 的 Q 值增加移动的位数。如果 x 移位少于 10 位(以避免溢出),则 y 右移剩余位(减少 y 的 Q 值),以便 Q 之间的差异xy的值是10。然后slope被计算为x/y。当您除以定点值时,结果的 Q 值等于分子的 Q 值减去分母的 Q 值。 slope 是 Q10,因为 xy 的 Q 值相差 10。