位运算收集

(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数,行为表现我们可以自己定义。

 

posted @ 2017-08-25 16:58  Magnum Programm Life  阅读(281)  评论(0编辑  收藏  举报