通配符掩码的加法和减法

时间:2017-01-15 18:26:04

标签: bit-manipulation

通配符掩码通常用于网络。

通配符掩码通常具有"通配符"位表示该位可以是0或1。 这个二进制通配符掩码(其中x' s表示通配符位)

10xx

涵盖了所有这些价值观:

1000
1001
1010
1011

是否有一种增加/减少位掩码的有效方法? 例如......

x011 + 0111 + xx01 + xxx0 + 1111 = xxxx

1 个答案:

答案 0 :(得分:0)

有几种常用方法可以用通配符表示位掩码,这里有如何计算" join" (由输入表示的集合的联合,然后"向上舍入"到至少包含该集合的最严格的掩码)

已知/值

由一对掩码known, value(简称k,v)组成,其中known有一个iff,一个有固定值,0为通配符。 value具有非通配符位的值,对于通配符位,该值本身不相关,但如果选择它,则会简化数学运算。

示例中掩码的表示将是

      known value
x011  0111  0011
0111  1111  0111
xx01  0011  0001
xxx0  0001  0000
1111  1111  1111

其中两个(kr, vr) = (ka, va) ⋁ (kb, vb)的加入是

kr = ka & kb & ~(va ^ vb) // known if known in both inputs and same value
vr = va & kr   // value is the same as in either input, with wildcards normalized to 0

Z,0

令人困惑的名字,但它是一对掩码,其中Z(零)有1 iff该位可以是0(因此它是0或通配符)而O(一)有1如果该位可以是1(所以它是1或通配符)。与已知/价值相比,它有一些优点和缺点,

  • 更对称。 Z和O的计算通常是相同的或"对",而已知和值的计算根本不同。
  • 可以代表空集。无论是专业人士还是专业人士,取决于您的工作。当Z和O中的位为0时,表示该位不能具有任何值。
  • 通常数学效率更高,OTOH通常更难以思考。加入很容易。

示例中掩码的表示将是

      Z     O
x011  1100  1011
0111  1000  0111
xx01  1110  1101
xxx0  1111  1110
1111  0000  1111

其中两个(zr, or) = (za, oa) ⋁ (zb, ob)的加入是

zr = za | zb
or = oa | ob