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