【发布时间】:2013-11-28 04:07:37
【问题描述】:
我正在尝试制作一个Inverse Multiplexer,它可以根据一些掩码将一个比特流分成多个。
这是想法示例
这是一个24位的流,每个字母代表1位:
abcdefgh ijklmnop qrstuvwx
给定三个个掩码,每个掩码没有共同点,如果 & 一起是 [1,1,1,1,1,1,1,1]
[1, 1, 0, 0, 1, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 1, 1]
[0, 0, 0, 1, 0, 1, 0, 0]
像这样将这些掩码应用于流
stream1 = ab__e___ ij__m___ qr__u___
stream2 = __c___gh __k___op __s___wx
stream3 = ___d_f__ ___l_n__ ___t_v__
所以原始比特流被分成三个比特流,如下所示:
stream1 = abeijmqru
stream2 = cghkopswx
stream3 = dflntv
以上只是一个例子,我需要对给定的比特流应用任意数量的掩码。保证口罩彼此之间具有OR 的零结果。将AND 应用于所有掩码,结果为 ONE。所有掩码的长度相同。
我写了一个愚蠢的版本来蛮力这个想法,基本上是在循环中逐位移动。认为它肯定没有效率。
我查看了这个http://graphics.stanford.edu/~seander/bithacks.html
没有线索。任何人都有更好的想法如何改善这一点? (在 x86 机器上)
【问题讨论】:
-
如果您能解释您想要达到的目标,改进什么,将会非常有帮助?这些面具将如何使用?此外,您正在讨论位掩码,但该示例包含字符(每个字符由 16 位表示)。你用的是什么编程语言?
-
@alfasin 是我制作Inverse Multiplexer 的个人编程实验。我将其添加到问题中。
-
@alfasin 我觉得这些字母只是每个位的指示符
-
@PeterGibson 坏主意 - 如果您正在处理位和字节,请坚持使用它,否则只会令人困惑。
-
@alfasin 我认为这是说明掩码中位位置的好方法,但可以更清楚地解释
标签: bit-manipulation bit bitmask bitstream