【发布时间】:2020-04-24 11:10:17
【问题描述】:
我想在 Rust 中创建一个“位级”的新数据类型。
例如,四精度浮点数。我可以创建一个具有两个双精度浮点数的结构,并通过将四边形分成两个双精度来任意提高精度,但我不想这样做(这就是我在“位级”上的意思)。
我考虑过使用u8-array 或bool-array,但在这两种情况下,我都浪费了 7 位内存(因为 bool 也是一个字节大)。我知道有几个crates 实现了位数组或位向量之类的东西,但是查看它们的源代码并不能帮助我理解它们的实现。
如何在不浪费内存的情况下创建这样的位数组,这是我在实现四精度类型时想要选择的方式吗?
我不知道如何实现不使用基本类型的新数据类型或者是结合基本类型的结构,我还没有在网上找到解决方案;也许我没有使用正确的关键字进行搜索。
【问题讨论】:
-
“在这两种情况下,我都浪费了 7 位内存”是什么意思?使用每个 u8 的每一位,你就不会。
-
您好,欢迎来到 StackOverflow!所以要明确一点,与 Python 交互的部分只是背景故事,问题根本与 Python 无关?您要创建的新的四精度浮点类型不必从 Python 访问,是吗?
-
This Q&A 可能对您有帮助吗?
u8数组不会浪费任何位,但您似乎不确定如何“访问”这些位? -
@LukasKalbertodt 是的,Python 只是背景故事,不需要访问它。是的,你是对的,更具体地说,如果我只在 u8 中写 1 和 0 会浪费位
-
要清楚,您的字节数组将是
[u8; 16],而不是[u8; 128]。正如 Ry- 所说;您使用 所有 个位。