Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bit manipulation 具有可选项的位字段掩码/操作_Bit Manipulation_Bit Fields_Bitmask - Fatal编程技术网

Bit manipulation 具有可选项的位字段掩码/操作

Bit manipulation 具有可选项的位字段掩码/操作,bit-manipulation,bit-fields,bitmask,Bit Manipulation,Bit Fields,Bitmask,我试图找到一种方法来处理几个位字段情况,包括可选、必需和不允许的位置 yy?nnn?y 11000001 ?yyy?nnn 01110000 nn?yyy?n 00011100 ?nnn?yyy 00000111 在这四种情况下,?表示位可以是1或0,而y表示需要1,而n表示需要0。所需位的左/右位可以是任何内容,其余位必须是0。是否有一种掩蔽方法可用于测试输入位集是否满足以下情况之一?尝试类似的方法(使用C/C++表示法): (输入和掩码)=掩码&&(输入&~(掩码| mask1))=

我试图找到一种方法来处理几个位字段情况,包括可选、必需和不允许的位置

yy?nnn?y
11000001

?yyy?nnn
01110000

nn?yyy?n
00011100

?nnn?yyy
00000111
在这四种情况下,
表示位可以是
1
0
,而
y
表示需要
1
,而
n
表示需要
0
。所需位的左/右位可以是任何内容,其余位必须是
0
。是否有一种掩蔽方法可用于测试输入位集是否满足以下情况之一?

尝试类似的方法(使用C/C++表示法):

(输入和掩码)=掩码&&(输入&~(掩码| mask1))==0

当然,这取决于您如何表示“模板”

例如,假设您将它们表示为一对
(z,o)
,其中
z
对于允许为0的每一位都有一个1,而
o
对于允许为1的每一位都有一个1(如我在评论中链接的文章中所述)。然后针对它测试
x
,您可以执行以下操作:

if ((x | z) == -1 && (x & o) == x)
    passes test
您还可以将模板表示为一对
(掩码,位)
,其中
掩码
是必须匹配的所有位的掩码(即0表示?,1表示固定位),
是固定位的值。然后您可以测试
x
如下:

if ((x & mask) == bits)
    passes test

一般来说。如果您的问题有特殊的形式,就像您的问题一样,您可以使用专门的测试。

这让我想起了“检查我的解决方案”中描述的按位域,它可以直接使用您的掩码:
if ((x & mask) == bits)
    passes test