(1<<(x&31)) & mask):
这个mask是一个32bit数, 假设是0xaaaaaaaa.
刚开始理解这个费啦不少时间,咱们能够先折1/4来看。表达式则变成啦:
(1<<(x&(2^8-1))) & 0xaa) == (1<<(x&15)) & 0xaa):it
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数,行为表现咱们能够本身定义。时间