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

 

相关文章:

  • 2021-08-28
  • 2021-06-18
  • 2021-05-01
  • 2021-04-09
  • 2022-01-31
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-19
  • 2021-08-31
  • 2022-01-23
  • 2021-09-21
  • 2021-07-06
  • 2021-12-31
  • 2021-08-05
相关资源
相似解决方案