我有以下问题,我无法优雅地解决。
我有一个可以采用 3 个可能值(0、1、2)的数据类型。我有一个包含 20 个这种数据类型元素的数组。
由于我想在最少的内存上对信息进行编码,因此我执行了以下操作:
- 考虑到每个元素最多可以取 4 个值(2 位)
- 每个
char
都有 8 位,所以我可以放 4 次元素 - 5
char
包含 40 位,所以我可以存储 20 个元素。
我已经做到了,它的工作时间。
但是,我有兴趣评估通过使用我的元素只能取 3 个值而不是 4 这个事实获得的空间。每个可能的组合都给我们 3 的 20 次方,即 3,486,784,401。然而 256 的 4 次方给我们 4,294,967,296 ,这是更大的。这意味着我可以在 4 上编码我的数据char
。
有没有一种通用的方法来做第二个想法?第一个想法很容易通过位掩码/位移位实现。但是,由于 3 个值不适合整数位数,我不知道如何将这些值中的任何一个编码/解码为 4 个字符的数组。
您对它的完成方式有任何想法或参考吗?我认为必须有一个通用的方法。如果有什么我对这个的可行性感兴趣的话
编辑:这可以简化为:如何将 0 到 2 的 5 个值仅存储到 1 个字节中(如 256 >= 3^5 = 243)