它告诉您小数点的每一侧使用了多少位。
举一个简单的例子。2 个字节,16 位。
那很容易是U8.8。也就是说,高字节是“整数”部分,低字节是“小数”部分。
因此,让我们将其作为解释变得更容易一些。
考虑二进制编码的十进制。这就是你将十进制数字编码为字节的地方,每个字节是 2 位。每个半字节都是一个十进制数字,所以 1001 0010 是“92”。有两个字节,1001 0010 0100 0111 是 9287。
因此,您可以看到没有分数的情况下,16 位如何表示 0000 到 9999。使用您的符号,这可能是 U16.0。
现在,您可以看看我们是否逻辑地将小数点放在中间,现在我们可以有 00.00 到 99.99 或 U8.8。
底层的位模式是相同的,这完全取决于您在逻辑上放置小数点的位置。
现在,在这个例子中,你看到了小数点之间的小数点。
如果您使用二进制表示,则“小数”点位于二进制数字之间。
所以,U8.8 us 11111111. 11111111
,U12.4就是11111111 1111.1111
。
S vs U 告诉您有关符号位的信息。因此,您将拥有 S7.8 而不是 U8.8 S1111111. 11111111
。
当您有类似表示的数字时,那么它只是二进制数学,就像任何其他数字(如整数)一样。当您将数字转换为 ascii 时,或者将其与您需要转换的其他表示结合起来。
例如。要将 U8.8 添加到 U12.4,您需要在执行数学运算之前将 U8.8 转换为 U12.4。
因此,11111111. 11111111
只需要右移 4 个位置即可成为00001111 1111.1111
. 然后你可以像往常一样处理两个 12.4 数字。您会注意到在转换过程中您失去了 8.8 数字的精度。这被称为“运气不好”。您还可以将这两个数字提升到更高的代表,有各种各样的选择。