1、取出nn在二进制表示下的第位(n>>k)&1
2、取出nn在二进制表示下的第位(后kk位)n&((1<<k)-1)
3、第位取反n^(1<<k)
4、第kk位赋一n|(1<<k)
5、第位赋零n&(~(1<<k))
数学技巧∀k∈[0,35],2kmod37∀k∈[0,35],2kmod37互补相等,且恰好取遍整数1∼361∼36
int __builtin_ctz(unsigned int x)
int __builtin_ctzll(unsigned long long x)
返回xx的二进制表示下最低位的1后边有多少个0
int __builtin_popcount(unsigned int x)
int __builtin_popcountll(unsigned long long x)
返回的二进制表示下有多少位为1