位运算收集
(1<<(x&31)) & mask):
这个mask是一个32bit数, 假设是0xaaaaaaaa.
刚开始理解这个费啦很多时间,我们可以先折1/4来看。表达式则变成啦:
(1<<(x&(2^8-1))) & 0xaa) == (1<<(x&15)) & 0xaa):
x&15得到的范围是[0,15), 可以得到x这个数落在15中的哪个位置,即使大于15也仍会落在这其中的一个位置。然后1左移这个数则把这个位置置1,者表示这个数落在这个位置。
然后&mask, mask 是我们想要的行为表现,1这是真,0则是假。
首先任意一个正数x, 可以表达为 :x = 16*n +[0,15]. 换句化说,任意一个数可以以16为一个单位对它进行mask进行行为控制。
当前我们的mask = 0xaa = 1010,1010, 这样每16个数的行为表现为“真假真假,真假真假”。
同样我们扩展一下,我们希望以32为一个单位进行控制。那么我们的表达式就变成啦:
(1<<(x&31)) & mask), mask 必须是32bit数,行为表现我们可以自己定义。