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