我正试图找到一种方法来处理包含可选,必需和不允许位置的几个位域案例。
yy?nnn?y
11000001
?yyy?nnn
01110000
nn?yyy?n
00011100
?nnn?yyy
00000111
在这四种情况下,?
表示该位可以是1
或0
,而y
表示需要1
且n
1}}表示需要0
。所需位的左/右位可以是任何位,其余位必须是0
。是否有一种掩蔽方法可用于测试输入位集是否满足其中一种情况?
答案 0 :(得分:0)
尝试这样的事情(使用C / C ++表示法):
(input & mask) == mask && (input & ~(mask | mask<<1 | mask>>1)) == 0
答案 1 :(得分:0)
当然,这当然取决于你如何代表“模板”。
例如,假设您将它们表示为一对(z, o)
,其中z
对于允许为0的每个位都有1,而o
对于每个位都为1允许为1(如我在评论中链接的论文)。然后根据它来测试x
:
if ((x | z) == -1 && (x & o) == x)
passes test
您还可以将模板表示为一对(mask, bits)
,其中mask
是必须匹配的所有位的掩码(即0表示?,1表示固定位)和{{1是固定位的值。然后你可以测试bits
,如:
x
总的来说。如果你的问题有一个特殊的形式,就像你的问题一样,你可以使用专门的测试。