【发布时间】:2019-09-27 10:18:44
【问题描述】:
有没有办法以模拟编码器(或解码器)逻辑门的方式处理 c++ 中的位(c 也可以!)?
例如:将一个字节(8 位)编码为 3 位,或将一个字(16 位)编码为 4 位,反之亦然。就像编码器和解码器逻辑门一样。
这样做的目标是数据压缩(我知道有更好的方法,但这是过程的一个阶段,出于项目目的必须以这种方式完成)
编码器逻辑门:
解码器逻辑门:
注意:可以使用按位运算符完成,但我需要一种非常快速有效的方法,这样我才能做到数十亿次同行秒!
【问题讨论】:
-
看看
std::vector<bool>,它是一个bitset的特殊表示。 -
嗯,有和没有。 C++ 具有逐位操作和位域,所以“是的,可以实现该逻辑”,但你不能只保存 3 位。你总是必须在内存中使用至少 8 位,所以你不会真正获得任何东西。所以“不,不是真的”。
-
@Botje 效率方面呢?我在文章末尾加了一点注释,请阅读它,请
-
请不要在事后添加要求。 @YvesDaoust 的实现是 10 条指令。假设每个周期有 1 条指令,这将在单个内核上每秒产生数亿次调用。如果您确实需要达到该目标,您将需要使用多个内核并吃掉协调/内存开销,或者切换到 SIMD 并吃掉额外的复杂性。
-
“数十亿次同行秒”——基于问题中显示的知识,这是一个相当不切实际的目标。尤其是如果你想做一些实际的事情,即输入一些有意义的数据,并对结果做一些事情,而不是把它们扔掉。
标签: c++ encoding compression bit