我正在尝试制作一个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 机器上)