有趣的位掩模形成

时间:2013-11-06 13:33:36

标签: c bitmask

我遇到了这些位掩码编队但是想知道它们背后的逻辑

MASK_01010101 = ((unsigned int) (-1))/3
MASK_00110011 = ((unsigned int) (-1))/5
MASK_00001111 = ((unsigned int) (-1))/17

编辑:谢谢迈克尔。我编辑了最后一个

3 个答案:

答案 0 :(得分:2)

多么美丽!但最后一个是错的((unsigned int)( - 1))/ 7 = b 00100100!
对于那些对完整版8位掩码感兴趣的人,请在codepad.org上查看此link

答案 1 :(得分:1)

如果将-1转换为无符号整数类型,它将回绕到类型可以表示的最大(正)值。换句话说,所有1都是二进制的。

当你考虑二进制形式时,每种情况下的除法运算可能会变得更清晰:

  • 3 - > 11
  • 5 - > 101
  • 17 - > 10001

按这些位模式划分所有1,可以为您提供MASK_*名称中显示的模式之一。 (unsigned int通常超过8位,因此实际模式会更长。)

答案 2 :(得分:0)

当他/她写这篇文章时,作者并没有明确或有效率。他们只是炫耀或有目的地混淆代码。