U0.8、U4.8、U12.8、S0.4、S4.4、S12.4、U8.8等定点表示究竟是什么意思
What exactly means U0.8, U4.8, U12.8, S0.4, S4.4, S12.4, U8.8 etc. fixed-point representation?
我发现很难理解定点表示。当我有无符号类型的数据 (C++) 并且我想像定点一样使用该数字时,我需要做一定数量的位操作,这对我来说不清楚。
因此,假设我希望我的无符号数字最多可以 255(8 位数字)以 U4.4 或 U12.8 或 S13.8 或任何表示法表示(U - 无符号,S - 有符号,当我的数字是 int 时它有问题)。基本上,我正在扩展(或者我希望我是)数字,处理它,然后将其返回到以前的状态。
我该怎么做?
有人可以分享链接,我可以找到与此主题密切相关的内容。我找了三个小时,我找到的只是关于定点算术的一般解释,没有什么非常实用的。
谢谢
它告诉你小数点的每一边使用了多少位。
举一个简单的例子。2个字节,16位。
这很容易是U8.8。也就是说,顶部字节是"整数"部分,低字节是"分数"部分。
因此,让我们将其简化为解释。
考虑二进制编码十进制。这是您将十进制数字编码为字节半字节的地方,每个字节是 2 位数字。每个半字节都是十进制数字,因此 1001 0010 是"92"。使用两个字节时,1001 0010 0100 0111 是 9247。
因此,您可以看到在没有分数的情况下,16 位如何表示 0000 到 9999。使用你的符号,那可能是U16.0。
现在,您可以看到我们是否在逻辑上将小数点放在中间,现在我们可以有 00.00 到 99.99,或 U8.8。
底层位模式是相同的,这都是你逻辑上放置小数点的问题。
现在,在此示例中,您看到了十进制数字之间的小数点。
如果您使用的是二进制表示形式,则"十进制"点位于二进制数字之间。
所以,U8.8 我们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 数字的精度。这被称为"运气不好"。您也可以将这两个数字提升到更高的表示形式,有各种各样的选择。
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- C++中抽象语法树最常用的表示法是什么
- 在 C++17 中表示 std::byte 文字的正确方法是什么?
- 此代码的 Big-O 表示法是什么?
- 在C++中将数据结构表示为字符串的首选方法是什么?
- 表示图像矩阵的理想数据结构是什么?
- 在 C++11 中表示日内时间 HH:MM:SS 的最佳方法是什么?
- 与类型的二进制表示相关的技术词是什么?
- 这段代码的 Big-O 表示法是什么
- scanf在c++中的表示是什么
- Qt类型的标准文本表示是什么?
- 使用大括号(即{})表示单行if或循环的目的是什么?
- 移动构造函数相对于复制构造函数的优势是什么?复制构造函数使用bool来表示是复制还是移动
- U0.8、U4.8、U12.8、S0.4、S4.4、S12.4、U8.8等定点表示究竟是什么意思
- 确定 HWND 是否表示顶级窗口的最佳方法是什么?
- c++内部可以表示的0到1之间不舍入的最大和最小的数是什么?
- 表示文件路径的guid字符串是什么?
- 表示框的推荐类是什么?
- 在C++中,用十六进制或八进制表示的整型文字的默认类型是什么
- 将表示小数的 int 转换为双精度的正确方法是什么