我遇到了这些位掩码结构,但想知道它们背后的逻辑
MASK_01010101 = ((unsigned int) (-1))/3
MASK_00110011 = ((unsigned int) (-1))/5
MASK_00001111 = ((unsigned int) (-1))/17
编辑:谢谢迈克尔。我编辑了最后一个
多么美丽!但最后一个是错误的 ((unsigned int)(-1))/7 = b00100100!
对于那些对完整版 8 位掩码感兴趣的人,请参阅 codepad.org 上的此链接。
如果您-1
转换为无符号整数类型,它会环绕到该类型可以表示的最大(正)值。换句话说,所有的 1 都是二进制的。
当您考虑二进制形式时,每种情况下的除法运算可能会变得更加清晰:
将所有 1 除以这些位模式会为您提供MASK_*
名称中显示的模式之一。(unsigned int
虽然通常超过 8 位,所以实际的模式会更长。)
作者在写这篇文章时并没有考虑清楚或效率。他们只是在炫耀或故意混淆代码。