__builtin_popcount(n)
该函数时判断n的二进制中有多少个1
__builtin_ffs(n)
该函数判断n的二进制末尾最后一个1的位置,从1开始
可以理解为: l o w b i t ( x ) = x & ( − x ) = 2 _ _ b u i l t i n _ f f s ( n ) − 1 lowbit(x)={x} \& {(-x)}=2^{\_\_builtin\_ffs(n)-1} lowbit(x)=x&(−x)=2__builtin_ffs(n)−1
__builtin_ctz(n)
该函数判断n的二进制末尾后面0的个数,n=0时结果未定义,与上面形成对应,其实本质是差不多的